305.4. SIP エンドポイントとの間でメッセージを送信する

305.4.1. Camel SIP パブリッシャーの作成

以下の例では、SIP イベントパブリケーションを送信するために SIP パブリッシャーが作成されます。
ユーザー agent@localhost:5152。これは、SIP パブリッシャーとサブスクライバーの間のブローカーとして機能する SIP プレゼンスエージェントのアドレスです。

  • client という名前の SIP スタックを使用する
  • evtHdrName と呼ばれるレジストリーベースの eventHeader を使用する
  • evtId と呼ばれるレジストリーベースの eventId を使用する
  • リスナーが user2@localhost:3534 として設定された SIP スタックから
  • 公開されているイベントは EVENT_A
  • REQUEST_METHOD という必須ヘッダーが Request.Publish に設定されているため、エンドポイントがイベントパブリッシャーとして設定される
producerTemplate.sendBodyAndHeader(
    "sip://agent@localhost:5152?stackName=client&eventHeaderName=evtHdrName&eventId=evtid&fromUser=user2&fromHost=localhost&fromPort=3534",
    "EVENT_A",
    "REQUEST_METHOD",
    Request.PUBLISH);

305.4.2. Camel SIP サブスクライバーの作成

以下の例では、SIP サブスクライバーは、に送信された SIP イベントパブリケーションを受信するために作成されます。
ユーザー johndoe@localhost:5154

  • Subscriber という名前の SIP スタックを使用する
  • agent@localhost:5152 という Presence Agent ユーザーに登録する
  • evtHdrName と呼ばれるレジストリーベースの eventHeader を使用する。evtHdrName には、Event_A に設定されたイベントが含まれている
  • evtId と呼ばれるレジストリーベースの eventId を使用する
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            // Create PresenceAgent
            from("sip://agent@localhost:5152?stackName=PresenceAgent&presenceAgent=true&eventHeaderName=evtHdrName&eventId=evtid")
                .to("mock:neverland");

            // Create Sip Consumer(Event Subscriber)
            from("sip://johndoe@localhost:5154?stackName=Subscriber&toUser=agent&toHost=localhost&toPort=5152&eventHeaderName=evtHdrName&eventId=evtid")
                .to("log:ReceivedEvent?level=DEBUG")
                .to("mock:notification");

        }
    };
}

Camel SIP コンポーネントには、テストおよびデモ目的でのみ使用することを意図した Presence Agent も同梱されています。プレゼンスエージェントのインスタンス化の例は、上に示されています。

Presence Agent はユーザー agent@localhost:5152 として設定されており、パブリッシャーとサブスクライバーの両方と通信できることに注意してください。パブリッシャーおよびサブスクライバーとは別の SIP stackName があります。Camel コンシューマーとして設定されていますが、実際にはエンドポイント mock:neverland へのルートに沿ってメッセージを送信しません。