2

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

4

2 回答 2

2

我不得不对 GlassFish 做一次同样的事情。您可以告诉您的应用程序服务器在每个 MDB 的使用者上创建,然后您的 MDB 将一次处理一条消息。在 glassfish 中做到这一点:

打开 GlassFish Server 管理控制台,导航到 Configuration -> configuration-name -> EJB Container 节点,然后选择 MDB Settings 选项卡。

指定:

Maximum Pool Size: 1

玻璃鱼就是这样。重新启动服务器,您就可以开始了。检查以获取更多信息。

于 2012-11-14T13:30:47.147 回答
0

Implement your MDB as:

@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) {
  }

}

Configure the queue in standalone-full.xml as:

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

Under jms destinations add:

<jms-queue name="myQueue">
  <entry name="/queue/myQueue"/>
  <durable>true</durable>
</jms-queue>
于 2012-11-14T13:34:17.093 回答