JMS 消息选择器 - 消耗其他一切/捕获所有/默认大小写
JMS Message Selectors - consuming everything else / catch all / default case
假设我只有一个队列。我有 3 个消费者使用以下选择器从该队列中读取:
consumer1: myMessageType = 'Funny'
consumer2: myMessageType = 'Sad'
consumer3: no selector defined
现在我像这样在队列中发送一堆消息...
Message 1 : myMessageType = 'Funny'
Message 2 : myMessageType = 'Funny'
Message 3 : myMessageType = 'Funny'
Message 4 : myMessageType = 'Funny'
Message 5 : myMessageType = 'Sad'
Message 6 : myMessageType = 'Sad'
Message 7 : myMessageType = 'Sad'
Message 8 : myMessageType = 'Sad'
Message 9 : myMessageType = 'Weird'
Message 10: myMessageType = 'Weird'
Message 11: myMessageType = 'Weird'
Message 12: myMessageType = 'Weird'
如果没有定义消息选择器,consumer3 是否只会接收 myMessageType = 'Weird' 的消息?还是 consumer3 会收到所有消息类型?
我显然已经从我们的真实世界用例中简化了我的问题。我们将有许多具有消息选择器的消费者,并且正在尝试弄清楚我们是否可以使用没有消息选择器的消费者来处理与任何其他消费者的选择器不匹配的每条消息。
我进行了搜索,但未能找到此问题的明确答案。我考虑过编写一些代码来测试它,但担心幕后的许多变量(预取、缓存、并发等)可能会给我一个误导性的结果。最后,我还担心如果没有在规范中明确指定,行为可能会因代理而异。我希望有人知道具体的答案。
没有选择器的 JMS 消费者可以接收 任何 消息,无论其他消费者使用什么选择器。因此,要获得您想要的行为,您需要为任何不匹配的消息创建一个“相反”选择器,如您所描述的。
假设我只有一个队列。我有 3 个消费者使用以下选择器从该队列中读取:
consumer1: myMessageType = 'Funny'
consumer2: myMessageType = 'Sad'
consumer3: no selector defined
现在我像这样在队列中发送一堆消息...
Message 1 : myMessageType = 'Funny'
Message 2 : myMessageType = 'Funny'
Message 3 : myMessageType = 'Funny'
Message 4 : myMessageType = 'Funny'
Message 5 : myMessageType = 'Sad'
Message 6 : myMessageType = 'Sad'
Message 7 : myMessageType = 'Sad'
Message 8 : myMessageType = 'Sad'
Message 9 : myMessageType = 'Weird'
Message 10: myMessageType = 'Weird'
Message 11: myMessageType = 'Weird'
Message 12: myMessageType = 'Weird'
如果没有定义消息选择器,consumer3 是否只会接收 myMessageType = 'Weird' 的消息?还是 consumer3 会收到所有消息类型?
我显然已经从我们的真实世界用例中简化了我的问题。我们将有许多具有消息选择器的消费者,并且正在尝试弄清楚我们是否可以使用没有消息选择器的消费者来处理与任何其他消费者的选择器不匹配的每条消息。
我进行了搜索,但未能找到此问题的明确答案。我考虑过编写一些代码来测试它,但担心幕后的许多变量(预取、缓存、并发等)可能会给我一个误导性的结果。最后,我还担心如果没有在规范中明确指定,行为可能会因代理而异。我希望有人知道具体的答案。
没有选择器的 JMS 消费者可以接收 任何 消息,无论其他消费者使用什么选择器。因此,要获得您想要的行为,您需要为任何不匹配的消息创建一个“相反”选择器,如您所描述的。