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 へのルートに沿ってメッセージを送信しません。