2024-04-25 14:37:41 发布
网友
我有来自不同应用程序的多个生产者向RabbitMQ中的主题发送消息。以及来自不同应用程序的多个消费者阅读这些主题。这个简单的体系结构作为一个PoC已经完美地工作了。 但现在我有多个来自这些应用程序的实例,我不希望appx实例1读取与appx实例2相同的消息。然而,appx和appy(及其所有实例)需要从同一主题中红色。在
我知道如果使用者共享相同的消费者ID,Karaf会平衡来自主题的消息的消耗?我一直在看医生,没有发现像这样的东西。在
我相信你需要卡夫卡的消费群体功能。在
(对于每条消息,不同的消费群体应该一起消费,但是每个消费群体中只有一个消费者可以消费这条消息)
请参见rabbitmq getstarted,您可以结合Topics模式和Work queues模式来实现此功能。在
Topics
Work queues
示例代码
接收.py
#!/usr/bin/env python import pika import sys connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel() channel.exchange_declare(exchange='topic_logs', type='topic') queue_name = sys.argv[1] channel.queue_declare(queue=queue_name) channel.queue_bind(exchange='topic_logs', queue=queue_name, routing_key='my_key') print ' [*] Waiting for logs. To exit press CTRL+C' def callback(ch, method, properties, body): print " [x] %r:%r" % (method.routing_key, body,) ch.basic_ack(delivery_tag = method.delivery_tag) channel.basic_qos(prefetch_count=1) channel.basic_consume(callback, queue=queue_name) channel.start_consuming()
发送.py
如何运行它?
您需要启动4个消费者来解释这个问题:
python receive.py consumer_group1 python receive.py consumer_group1 python receive.py consumer_group2 python receive.py consumer_group2
与app1(instance1)、app1(instance2)、app2(instance1)、app2(instance2)的交叉映射
那么,开始吧发送.py公司名称:
python send.py
您将看到每个应用程序的一个实例可以获取消息。 如果您再次发送,来自两个不同应用程序的另一个实例可以接收消息。在
我相信你需要卡夫卡的消费群体功能。在
(对于每条消息,不同的消费群体应该一起消费,但是每个消费群体中只有一个消费者可以消费这条消息)
请参见rabbitmq getstarted,您可以结合
Topics
模式和Work queues
模式来实现此功能。在示例代码
接收.py
发送.py
^{pr2}$如何运行它?
您需要启动4个消费者来解释这个问题:
与app1(instance1)、app1(instance2)、app2(instance1)、app2(instance2)的交叉映射
那么,开始吧发送.py公司名称:
您将看到每个应用程序的一个实例可以获取消息。 如果您再次发送,来自两个不同应用程序的另一个实例可以接收消息。在
相关问题 更多 >
编程相关推荐