Menu Close
5.6.2.4. リモート JMS 宛先
1 つの JBoss EAP インスタンスは、リモート JNDI を介して別の JBoss EAP インスタンスに設定された ActiveMQ Artemis 宛先にメッセージを送信できます。
そのためには、追加の JBoss EAP 設定が必要になります。最初に、エクスポートされた JMS キューが設定されます。
java:jboss/exported
namespace でバインドされた JNDI 名のみがリモートクライアントの候補として考慮されるため、キューには適切な名前が付けられます。
JBoss EAP クライアントアプリケーションサーバー とJBoss EAP リモートサーバーにキューを設定する必要があります。
<jms-queue name="RemoteQueue"> <entry name="java:jboss/exported/jms/queues/RemoteQueue"/> </jms-queue>
クライアントがリモートサーバーに接続できるようにするには、ユーザーのアクセスクレデンシャルを設定する必要があります。リモートサーバーで add user ユーティリティー を実行し、guest グループ内に新しいアプリケーションユーザーを作成します。この例には、「admin」という名前のユーザーと「secret」というパスワードがあります。
RouteBuilder 実装は前述の例とは異なります。接続ファクトリーを注入する代わりに、InitialContext を設定し、JNDI から取得する必要があります。
この configureInitialContext
メソッドにより、この InitialContext が作成されます。リモート JBoss EAP インスタンスのホスト名とポート番号を参照するプロバイダー URL を設定する必要があることに注意してください。この例では、JBoss EAP JMS http-connector が使用されていますが、代替方法は ここ に記載されています。
最後に、ルートは 10 秒ごとに XML ペイロードを以前設定されたリモート宛先 (RemoteQueue) に送信するよう設定されます。
@Override public void configure() throws Exception { Context initialContext = configureInitialContext(); ConnectionFactory connectionFactory = (ConnectionFactory) initialContext.lookup("java:jms/RemoteConnectionFactory"); JmsComponent component = new JmsComponent(); component.setConnectionFactory(connectionFactory); getContext().addComponent("jms", component); from("timer://foo?fixedRate=true&period=10000") .transform(constant("<?xml version='1.0><message><greeting>hello world</greeting></message>")) .to("jms:queue:RemoteQueue?username=admin&password=secret") .to("log:jms?showAll=true"); } private Context configureInitialContext() throws NamingException { final Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, "http-remoting://my-remote-host:8080")); env.put(Context.SECURITY_PRINCIPAL, System.getProperty("username", "admin")); env.put(Context.SECURITY_CREDENTIALS, System.getProperty("password", "secret")); return new InitialContext(env); }