从MDB挂起队列

时间:2012-11-14 13:20:02

标签: java jms weblogic jboss-mdb

我们有一个应用程序,我们正在使用JMS QueueMDB。我希望一次只能从MDBQueue发送一条消息。我的意思是,只要MDB收到来自Queue的消息,它就应该暂停Queue,一旦处理完成,就应该恢复Queue。我可以在MDB中为此编写代码,还是我可以在ejb-jar.xml中进行任何配置?

2 个答案:

答案 0 :(得分:2)

我必须对GlassFish做过一次。您可以告诉应用程序服务器根据每个MDB的使用者创建,然后您的MDB将一次处理一条消息。要在glassfish中做到这一点:

  

打开GlassFish Server管理控制台,导航到   配置 - >配置名称 - > EJB容器节点然后选择   MDB设置选项卡。

指定:

Maximum Pool Size: 1

这就是玻璃鱼。重新启动服务器,你很高兴。查看thisthis了解详情。

答案 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>