2

を使用しているアプリケーションJMS QueueMDB. MDB一度にからに送信されるメッセージは 1 つだけにしてくださいQueueMDBつまり、は からメッセージを受け取るとすぐにQueueを中断しQueue、処理が終了しQueueたら を再開する必要があります。でこれのコードを書くことはできますか、MDBまたは で作成できる構成はありますejb-jar.xmlか?

4

2 に答える 2

2

GlassFishでも同じことを一度しなければなりませんでした。アプリケーション サーバーに MDB ごとにコンシューマーで作成するように指示すると、MDB は一度に 1 つのメッセージを処理します。グラスフィッシュでそれを行うには:

GlassFish Server 管理コンソールを開き、[構成] -> [構成名] -> [EJB コンテナ] ノードに移動して、[MDB 設定] タブを選択します。

特定:

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 に答える