vnpy/vnpy/amqp
msincenselee 2b0ff99560 rabbitmq
2019-08-25 15:48:21 +08:00
..
__init__.py rabbitmq 2019-08-25 15:48:21 +08:00
amqp_arch.jpg rabbitmq 2019-08-25 15:48:21 +08:00
base.py rabbitmq 2019-08-25 15:48:21 +08:00
consumer.py rabbitmq 2019-08-25 15:48:21 +08:00
producer.py rabbitmq 2019-08-25 15:48:21 +08:00
README.md rabbitmq 2019-08-25 15:48:21 +08:00
test01_receiver.py rabbitmq 2019-08-25 15:48:21 +08:00
test01_sender.py rabbitmq 2019-08-25 15:48:21 +08:00
test02_task.py rabbitmq 2019-08-25 15:48:21 +08:00
test02_woker.py rabbitmq 2019-08-25 15:48:21 +08:00
test03_subscriber.py rabbitmq 2019-08-25 15:48:21 +08:00
test06_rpc_client.py rabbitmq 2019-08-25 15:48:21 +08:00
test06_rpc_server.py rabbitmq 2019-08-25 15:48:21 +08:00
test07_rpc_client.py rabbitmq 2019-08-25 15:48:21 +08:00

代码源自余总得 https://github.com/yutiansut/QAPUBSUB/

RabbitMQ and AMQP

RabbitMQ 是采用 Erlang 语言实现的 AMQP 协议的消息中间件, 最初起源于金融系统,用于在分布式系统中存储转发消息。 RabbitMQ 发展到今天,被越来越多的人认可, 这和它在可靠性、可用性、扩展性、功能丰富等方面的卓越表现是分不开的。

消息支持多种传递模式,详细见案例https://www.rabbitmq.com/getstarted.html RabbitMQ 是一种典型的点对点模式,也可以通过设置交换器类型来实现发布订阅模式而达到广播消费的效果

1、点对点

发布者只需要定义queue的名称
接收者只需要定义queue的名称。 隐含上auto_ack=True即收到消息后自动确认就会从Queue中删除

2、工作队列

任务发布者指定queue名称durable=True。发送任务时发送到指定的queue设置delivery_mode=2(持久化该任务)
执行接收者指定queue名称durable=True。执行任务后才确认. ch.basic_ack(delivery_tag=method.delivery_tag

3、发布 / 订阅Pub/Sub模式

发布者创建channel时指定Exchange名称类型为fanout。
        发布时指定Exchange名称无routing_key。
订阅者创建channel时指定Exchagne名称类型为fanout。
        创建动态queue名绑定私有。
        绑定channel与queue指定Exchange和queue名。

4、路由模式

发布者发布者创建channel时指定Exchange名称类型为direct。
        发布时指定Exchange名称打上route_key作为标签
订阅者创建channel时指定Exchagne名称类型为direct。
        创建动态queue名绑定私有。
        绑定channel与queue指定Exchange、queue名和期望获取的标签
        如订阅多个标签,绑定多次即可。

5、主题模式

发布者创建channel时指定Exchange名称类型为topic。
        发布时指定Exchange名称打上route_key作为标签
订阅者创建channel时指定Exchagne名称类型为topic。
        创建动态queue名绑定私有。
        绑定channel与queue指定Exchange、queue名和期望获取的标签匹配符
        如订阅多个标签匹配符,绑定多次即可。
        匹配有两个关键字:
            * 1~多个字母
            # 0~多个字母

6、远程调用模式

服务端响应创建channel时指定queue定义basic_qos为只有一个执行
               定义消息的响应执行方法。
               消息执行方法执行完毕后发布结果消息使用指定routing_key标签为回复的queue
               推送属性包含参照ID确认ACK.
客户端请求创建2个queue一个是接收执行结果的queue并绑定执行结果回调响应自动ack。
                另一个是推送请求的queue推送时增加reply_to 和 参照ID。

consumer.py 提供两种消费者:

1. 订阅模式下得subscriber
2. 点对点/路由/主题模式下得subscriber_routing

producter.py提供两种生产者:

1. 订阅模式下得publisher
2. 点对点/路由/主题模式下得publisher_routing