我是JMS的新手。我使用教程here
创建了基本的生产者 - 队列 - 消费者场景这里我配置了一个生产者和一个消费者。如果我想添加多个消费者,那么它有可能吗? 我不想把它作为主题,以便"每一个"消费者会得到它。我想配置多个消费者,但只有一个"实际上会收到它。
有10个仆人的事。任何仆人都可以接受任务。但只有一个仆人。
两个选项 1)一个类的10个实例。 2)10个不同类的1个实例
是否可以实现上述两种选择中的任何一种?如果是的话怎么样?
目前,消费者配置如下
`
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="myQueue" />
<property name="messageListener" ref="messageReceiver" />
</bean>`
答案 对的,这是可能的;正如JB Nizet在下面的评论中所建议的那样。
1)选项1,即一个类的10个实例。
通过设置&#34; concurrentConsumers&#34;属性。将只有1个类的实例,但将有10个接收器线程使用相同的对象
<bean name="anotherListener" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="myQueue" />
<property name="messageListener" ref="anotherMessageReceiver" />
2)选项2,即1 /多个不同类的实例
我创建了SimpleMessageListenerContainer的多个实例
<bean id="messageReceiver" class="com.consumption.JmsMessageReceiver"/>
<bean id="anotherMessageReceiver" class="com.consumption.AnotherJmsMessageReceiver"/>
<bean name="listener" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="myQueue" />
<property name="messageListener" ref="messageReceiver" />
<property name="concurrentConsumers" value="2"></property>
</bean>
<bean name="anotherListener" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationName" value="myQueue" />
<property name="messageListener" ref="anotherMessageReceiver" />
<property name="concurrentConsumers" value="2"></property>
</bean>
我将调试放在onMessage
方法中,并观察到创建了指定数量的线程。