簡體   English   中英

如何在Wildfly 10上查找遠程JMS隊列

[英]How to lookup a remote jms queue on Wildfly 10

令人驚訝的是,我找不到如何向Wildfly 10 jms隊列發送消息的有效示例。 似乎每個版本的Jboss都有不同的執行方式,因此我可以找到一些示例,但每個示例都針對不同的版本,而Wildfly 10則沒有。

我要做的是將消息從主wildfly實例(在計算機1上運行)發送到從屬wildfly實例(在計算機2-n上運行)上托管的JMS隊列。 換句話說,我可能有幾個slave wildfly實例。

我已將以下內容添加到每個從屬實例的standalone-full.xml中:
1)在global-modules元素中

<module name="org.jboss.remote-naming" slot="main"/>

2)隊列定義為

<jms-queue name="JobTaskMDB" entries="queue/JobTaskExecuterQueue java:jboss/exported/queue/JobTaskExecuterQueue"/>

3)每個奴隸都有來賓用戶

我添加到主實例的standalone-full.xml中的唯一內容是上面的(1)

給定機器名稱,例如“ WILDD250148-8C9”,我如何有選擇地將消息從主Wildfly實例發送到承載從屬實例之一的指定計算機的隊列?

到目前為止,我什至無法通過隊列查詢。 我嘗試了以下代碼:

String server = "WILDD250148-8C9";
final Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName());
env.put(Context.SECURITY_PRINCIPAL, "guest"); //has been added to all slaves
env.put(Context.SECURITY_CREDENTIALS, "guest"); 
String url = 
    //"queue/JobTaskExecuterQueue";
    //"http-remoting://" + server + ":8080";
    //"tcp://" + server + ":5445";
    "jnp://" + server + ":1099";
env.put(Context.PROVIDER_URL, url);  
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
remoteContext = new InitialContext(env);
String lookupName = 
    //"java:jboss/exported/queue/JobTaskExecuterQueue"; 
    //"JobTaskMDB";
    "queue.queue/JobTaskExecuterQueue";
Object x = remoteContext.lookup(lookupName);

我總是得到“ javax.naming.CommunicationException:無法連接到任何服務器”,例如

 javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [jnp://WILDD250148-8C9:1099 (No connection provider for URI scheme "jnp" is installed)]

要么

javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [tcp://WILDD250148-8C9:5445 (No connection provider for URI scheme "tcp" is installed)]

當我使用網址“ http-remoting://” +服務器+“:8080”時,出現異常:

javax.naming.CommunicationException: Failed to connect to any server. Servers tried: [http-remoting://WILDD250148-8C9:8080 (Operation failed with status WAITING after 5000 MILLISECONDS)] [Root exception is java.net.ConnectException: Operation failed with status WAITING after 5000 MILLISECONDS]

顯然,我什至不知道要使用哪個提供商URL。

我在這里想念什么?

WildFly 10的正確URL提供程序是http-remoting 這適用於Wildfly 10.1:

    Properties props = new Properties();
    props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
    props.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
    props.put(Context.SECURITY_PRINCIPAL, "user");
    props.put(Context.SECURITY_CREDENTIALS, "password");
    InitialContext ctx = new InitialContext(props);
    ActiveMQConnectionFactory cf = (ActiveMQConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory");
    ActiveMQQueue queue = (ActiveMQQueue) ctx.lookup("queue/JobTaskExecuterQueue");

如果隊列的JNDI名稱為java:jboss/exported/queue/JobTaskExecuterQueue則從客戶端使用queue/JobTaskExecuterQueue (它相對於java:jboss/exported/名稱空間)

刪除此行,不需要此行: env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");

如果你得到

5000毫秒后操作失敗,狀態為WAITING

則表示由於某些不同的原因(例如防火牆,網絡速度慢或其他原因),連接被卡住了5秒鍾以上-客戶端代碼可能是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM