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