我们有一个应用程序,我们正在使用JMS Queue
和MDB
。我希望一次只能从MDB
向Queue
发送一条消息。我的意思是,只要MDB
收到来自Queue
的消息,它就应该暂停Queue
,一旦处理完成,就应该恢复Queue
。我可以在MDB
中为此编写代码,还是我可以在ejb-jar.xml
中进行任何配置?
答案 0 :(得分:2)
我必须对GlassFish做过一次。您可以告诉应用程序服务器根据每个MDB的使用者创建,然后您的MDB将一次处理一条消息。要在glassfish中做到这一点:
打开GlassFish Server管理控制台,导航到 配置 - >配置名称 - > EJB容器节点然后选择 MDB设置选项卡。
指定:
Maximum Pool Size:
1
答案 1 :(得分:0)
将您的MDB实施为:
@MessageDriven(name = "SingleThreadedMdb ", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myQueue"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1"),
@ActivationConfigProperty(propertyName = "consumerWindowSize", propertyValue = "0")
})
public class SingleThreadedMdb implements MessageListener {
@Override
public void onMessage(Message message) {
}
}
将standalone-full.xml
中的队列配置为:
<address-setting match="jms.queue.myQueue">
<dead-letter-address>jms.queue.DLQ</dead-letter-address>
<expiry-address>jms.queue.ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<max-delivery-attempts>1</max-delivery-attempts>
<max-size-bytes>10485760</max-size-bytes>
<address-full-policy>BLOCK</address-full-policy>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
</address-setting>
在jms目的地下添加:
<jms-queue name="myQueue">
<entry name="/queue/myQueue"/>
<durable>true</durable>
</jms-queue>