plugin端的rpc

以openvswitch的plugin为例进行分析。

neutron.plugin.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2类在初始化的时候调用了self.setup_rpc方法。

其代码为

  1. def setup_rpc(self):
  2. # RPC support
  3. self.service_topics = {svc_constants.CORE: topics.PLUGIN,
  4. svc_constants.L3_ROUTER_NAT: topics.L3PLUGIN}
  5. self.conn = n_rpc.create_connection(new=True)
  6. self.notifier = AgentNotifierApi(topics.AGENT)
  7. self.agent_notifiers[q_const.AGENT_TYPE_DHCP] = (
  8. dhcp_rpc_agent_api.DhcpAgentNotifyAPI()
  9. )
  10. self.agent_notifiers[q_const.AGENT_TYPE_L3] = (
  11. l3_rpc_agent_api.L3AgentNotifyAPI()
  12. )
  13. self.endpoints = [OVSRpcCallbacks(self.notifier, self.tunnel_type),
  14. agents_db.AgentExtRpcCallback()]
  15. for svc_topic in self.service_topics.values():
  16. self.conn.create_consumer(svc_topic, self.endpoints, fanout=False)
  17. # Consume from all consumers in threads
  18. self.conn.consume_in_threads()

创建一个通知rpc的客户端,用于向l2的agent发出通知。所有plugin都需要有这样一个发出通知消息的客户端。

分别创建了一个dhcp agent和l3 agent的通知rpc客户端。

之后,创建两个跟service agent相关的consumer,分别监听topics.PLUGIN和topics.L3PLUGIN两个主题。

plugin端的rpc