nimbus (1.2.4) | 2018-01-25 20:02 |
nimbus-sample (1.2.4) | 2018-01-26 17:06 |
アプリケーション開発において、複数のサーバ間で、1対多でメッセージのやりとりが必要とされる場合があります。
メッセージの送信者は、ServerConnectionFactoryからServerConnectionを取得して、メッセージを送信します。その際、メッセージには、論理的な宛先であるサブジェクトと、そのサブジェクト内でのキーを指定します。同一サブジェクト、同一キーのメッセージは到達順序が保証されます。
メッセージの受信者は、ClientConnectionFactoryからClientConnectionを取得して、MessageListenerを登録して、メッセージを受信します。MessageListenerの登録時に、サブジェクトとキーを指定して受信するメッセージを指定します。
1つのサーバに複数の受信者がいる場合は、MessageReceiverを使う事で、単独の接続を共有して、各受信者毎の受信したいサブジェクト及びキーを管理して受信する事ができます。
ServerConnectionとClientConnectionを使った送受信は、送信者が一方的に複数の受信者にメッセージを送信するものですが、RequestServerConnectionとRequestMessageListenerを使うと、送信者が複数の受信者にメッセージを送り、受信者は応答を返し、送信者が同期的及び非同期的に応答を受け取る事ができます。
通信プロトコルとしては、TCP、UDPユニキャスト、UDPマルチキャスト及びブロードキャストをサポートします。
関連するパッケージは、以下です。
アプリケーション向けインタフェースServerConnectionFactoryを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.publish.ServerConnectionFactory;
- import jp.ossc.nimbus.service.publish.ServerConnection;
- import jp.ossc.nimbus.service.publish.Message;
- // ServerConnectionFactoryを取得
- ServerConnectionFactory scf = (ServerConnectionFactory)ServiceManagerFactory.getServiceObject("ConnectionFactory");
- // ServerConnectionを取得する
- ServerConnection sc = scf.getServerConnection();
- // 送信するMessageを生成する
- Message message = sc.createMessage("Subject", "key");
- message.setObject("Hello.");
- // 送信する
- sc.send(message);
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.publish.tcp.ConnectionFactoryService | TCPでメッセージを送受信する |
jp.ossc.nimbus.service.publish.udp.ConnectionFactoryService | UDPでメッセージを送受信する |
jp.ossc.nimbus.service.publish.DistributedConnectionFactoryService | 論理的に1つの接続を複数の接続を使って送受信する |
jp.ossc.nimbus.service.publish.GroupConnectionFactoryService | 複数の接続を1つの接続に見せかけて送受信する |
jp.ossc.nimbus.service.publish.RequestConnectionFactoryService | 1対多で要求/応答のメッセージを送受信する |
アプリケーション向けインタフェースClientConnectionFactoryを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.repository.Repository;
- import jp.ossc.nimbus.service.publish.ClientConnectionFactory;
- import jp.ossc.nimbus.service.publish.ClientConnection;
- import jp.ossc.nimbus.service.publish.Message;
- import jp.ossc.nimbus.service.publish.MessageListener;
- import jp.ossc.nimbus.service.publish.MessageException;
- // ClientConnectionFactoryを取得
- // 取得方法は、ClientConnectionFactory実装サービスに依存する
- Repository repository = (Repository)ServiceManagerFactory.getServiceObject("JndiRepository");
- ClientConnectionFactory ccf = (ClientConnectionFactory)repository.get("publish/ClientConnectionFactory");
- // ClientConnectionを取得する
- ClientConnection cc = ccf.getClientConnection();
- // 接続する
- cc.connect();
- // 受信するサブジェクト及びキーを登録する
- cc.addSubject("Subject", new String[]{"key"});
- // MessageListenerを設定する
- cc.setMessageListener(
- new MessageListener(){
- public void onMessage(Message message){
- try{
- System.out.println(message.getObject());
- }catch(MessageException e){
- e.printStackTrace();
- }
- }
- }
- );
- // 受信を開始する
- cc.startReceive();
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.publish.tcp.ConnectionFactoryService | TCPでメッセージを送受信する |
jp.ossc.nimbus.service.publish.udp.ConnectionFactoryService | UDPでメッセージを送受信する |
jp.ossc.nimbus.service.publish.DistributedConnectionFactoryService | 論理的に1つの接続を複数の接続を使って送受信する |
jp.ossc.nimbus.service.publish.GroupConnectionFactoryService | 複数の接続を1つの接続に見せかけて送受信する |
jp.ossc.nimbus.service.publish.GroupClientConnectionFactoryService | 受信者側で複数の接続を1つの接続に見せかけて受信する |
jp.ossc.nimbus.service.publish.ClusterConnectionFactoryService | ClientConnectionFactoryをクラスタ化する |
jp.ossc.nimbus.service.publish.ClusterClientConnectionFactoryService | jp.ossc.nimbus.service.publish.ClusterConnectionFactoryServiceによってクラスタ化されたClientConnectionFactoryにアクセスする受信者側サービス |
アプリケーション向けインタフェースMessageReceiverを使った簡単なアプリケーションのサンプルを示します。
- import jp.ossc.nimbus.core.ServiceManagerFactory;
- import jp.ossc.nimbus.service.publish.MessageReceiver;
- import jp.ossc.nimbus.service.publish.Message;
- import jp.ossc.nimbus.service.publish.MessageListener;
- import jp.ossc.nimbus.service.publish.MessageException;
- // MessageReceiverを取得
- MessageReceiver mr = (MessageReceiver)ServiceManagerFactory.getServiceObject("MessageReceiver");
- // 接続する
- mr.connect();
- // MessageListenerが受信するサブジェクト及びキーを登録する
- mr.addSubject(
- new MessageListener(){
- public void onMessage(Message message){
- try{
- System.out.println(message.getObject());
- }catch(MessageException e){
- e.printStackTrace();
- }
- }
- },
- "Subject",
- new String[]{"key"}
- );
- // 受信を開始する
- mr.startReceive();
実装サービスの一覧は以下のとおりです。
実装サービス | 実装概要 |
jp.ossc.nimbus.service.publish.MessageReceiverService | 複数の受信者を管理してメッセージを受信する |
jp.ossc.nimbus.service.publish.RequestConnectionFactoryService | 要求メッセージを受信する |
jp.ossc.nimbus.service.publish.MessageForwardingService | メッセージを転送する |
サンプルは、以下。