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);
}