Rabbitmq Spring Cloud Stream-使用相同的路由密钥和不同的头从同一队列发布和使用

Rabbitmq Spring Cloud Stream-使用相同的路由密钥和不同的头从同一队列发布和使用,rabbitmq,spring-cloud-stream,Rabbitmq,Spring Cloud Stream,制作人 exchange name : xyz, exchange type: direct, queue: myqueue, routingkey : myroutingkey, @StreamListner1 - consume type1 message from queue: myqueue with routingkey : myroutingkey @StreamListner2 - consume type2 message from queue: myqueue with

制作人

exchange name : xyz,
exchange type: direct,
queue: myqueue,
routingkey : myroutingkey,
@StreamListner1 - consume type1 message from queue: 
myqueue with routingkey : myroutingkey

@StreamListner2 - consume type2 message from queue: 
myqueue with routingkey : myroutingkey
生产者可以向队列发送不同类型的对象,但为了区分b/w对象,他将发送标题['type']='type1'以及已经绑定到队列的'myroutingkey'

send message  : myroutingkey + header[type] = type1 to queue: 
myqueue

send message : myroutingkey + header[type] = type2 to queue: 
myqueue
消费者

exchange name : xyz,
exchange type: direct,
queue: myqueue,
routingkey : myroutingkey,
@StreamListner1 - consume type1 message from queue: 
myqueue with routingkey : myroutingkey

@StreamListner2 - consume type2 message from queue: 
myqueue with routingkey : myroutingkey
我使用Rabit MQ来实现上述要求


上述要求可能与spring cloud stream有关。如果可能,发布者和消费者方面需要做什么。请给出一些示例。

是的,可以通过使用
@StreamListener
上的
条件
属性来实现。比如说,

@StreamListener(target = Sink.INPUT, condition = "headers['type']=='bogey'")

详细信息是。

I,改进其格式,或帮助人们理解您的问题,并帮助您获得适当的答案。但是你可能仍然需要添加更多的信息才能完全解决你的问题。请记住,只有当两个听众都在同一个应用程序中时,这才有效。消费者对路由密钥没有任何概念。发布者使用路由密钥发布到exchange;使用者使用路由密钥从绑定到exchange的队列中消费。同一队列的2个使用者将竞争消息。如果您希望不同应用程序中的2
@StreamListener
s获得发布者发布的消息子集,则每个使用者都需要使用适当的路由密钥绑定自己的队列。