1対1のやり取りをチャネルで制御。
アプリケーションはRPCをするか文書を転送するのにMessagingを使ってる。
センダーは、どうやってレシーバーがちゃんと文書を受け取るか、呼び出しを処理しているか、を知ることができる?
Point-to-Pointチャネル上でメッセージを送ると、ひとつのレシーバーのみが特定のメッセージを受けとれる。(P.103の図を参照)
Point-to-Pointチャネルは、ひとつのレシーバーのみが受け取ったあらゆるメッセージを消費することを保証する。
関連パターン
株の売買システム
JMS Queue
QueueSender?を使った例
Queue queue = // obtain the queue via JNDI QueueConnectionFactory factory = // obtain the connection factory via JNDI QueueConnection connection = factory.createQueueConnection(); QueueSession session = connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); QueueSender sender = session.createSender(queue); Message message = session.createTextMessage("The contents of the message."); sender.send(message);
QueueReceiver?を使った例
Queue queue = // obtain the queue via JNDI QueueConnectionFactory factory = // obtain the connection factory via JNDI QueueConnection connection = factory.createQueueConnection(); QueueSession session = connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE); QueueReceiver receiver = session.createReceiver(queue); TextMessage message = (TextMessage) receiver.receive(); String contents = message.getText();
補足:JMS1.1はPoint-to-PointとPublish-Subscribeのドメインを統一しているので、コードはもっとシンプルにできる。(らしい)
.NET Message Queue
メッセージ送信は次のような感じ
MessageQueue queue = new MessageQueue("MyQueue"); queue.Send("The contents of the message.");
メッセージ受信は次のような感じ
MessageQueue queue = new MessageQueue("MyQueue"); Message message = queue.Receive(); String contents = (String) message.Body();