2017-08-02 116 views
0

我有兩個Wildfly 10服務器在運行,並且有一個JMS隊列與Jboss和Hornet一起工作。在那裏,我使用了netty連接器,所以我放棄了所有配置,並獲得了wildfy 10上的消息傳遞的默認配置。我無法讓JMS正常工作。 我沒有真正找到任何我想要的文檔或示例。我希望有人能幫忙。從一個wildfly 10應用程序連接到另一個遠程JMS隊列時出現問題

Serverside集團

我已經設置了wildfly 10服務器上的服務器端使用獨立-full.xml得到消息的延伸。

下面是有關消息獨立-full.xml內容(默認不添加任何東西)

<extension module="org.wildfly.extension.messaging-activemq"/> 

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0"> 
     <server name="default"> 
      <security-setting name="#"> 
       <role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/> 
      </security-setting> 
      <address-setting name="#" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/> 
      <http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/> 
      <http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http"> 
       <param name="batch-delay" value="50"/> 
      </http-connector> 
      <in-vm-connector name="in-vm" server-id="0"/> 
      <http-acceptor name="http-acceptor" http-listener="default"/> 
      <http-acceptor name="http-acceptor-throughput" http-listener="default"> 
       <param name="batch-delay" value="50"/> 
       <param name="direct-deliver" value="false"/> 
      </http-acceptor> 
      <in-vm-acceptor name="in-vm" server-id="0"/> 
      <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/> 
      <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/> 
      <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/> 
      <connection-factory name="RemoteConnectionFactory" entries="java:/jms/RemoteConnectionFactory" connectors="http-connector"/> 
      <pooled-connection-factory name="activemq-ra" transaction="xa" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm"/> 
     </server> 
    </subsystem> 

這裏爲i用於使用消息驅動定義隊列和接收消息取得的代碼:

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:app/jms/queue/SecServerQ") 
}) 
@JMSDestinationDefinition(
    name = "java:app/jms/queue/SecServerQ", 
    interfaceName = "javax.jms.Queue", 
    destinationName = "SecServerQ" 
) 
public class SecServerMDB implements MessageListener 
{ 
    public void onMessage(Message message) 
    { 
    // my code here 
    } 
} 

我可以看到在wildfly控制檯隊:

enter image description here

客戶方

我有一個獨立的,full.xml消息部分等於我的客戶端 - 服務器側CONFIGFILE也。

這裏是我試圖獲得連接到服務器端JMS隊列的代碼。

public class WildFlyJmsQueueSender 
{ 
    private static final Logger log = LoggerFactory.getLogger(WildFlyJmsQueueSender.class); 

    public final static String JMS_CONNECTION_FACTORY_JNDI="jms/RemoteConnectionFactory"; 
    public final static String JMS_QUEUE_JNDI="jms/queue/SecServerQ"; 
    public final static String JMS_USERNAME="jmsuser";  // The role for this user is "guest" in ApplicationRealm 
    public final static String JMS_PASSWORD="jms2017Pwd!"; 
    public final static String WILDFLY_REMOTING_URL="http-remoting://secserver.mydomain.com:8080"; 

    public void send(IpcoJmsMessage msg, String msgType) throws NamingException, JMSException { 

    Context namingContext = null; 

    try { 
     namingContext = getInitialContext(); 

     log.debug("Attempting to acquire connection factory {}", JMS_CONNECTION_FACTORY_JNDI); 
     ConnectionFactory conFactory = (ConnectionFactory) namingContext.lookup(JMS_CONNECTION_FACTORY_JNDI); 
     log.debug("Found connection factory {} in JNDI", JMS_CONNECTION_FACTORY_JNDI); 

     log.debug("Attempting to acquire destination {}", JMS_QUEUE_JNDI); 
     Destination destination = (Destination) namingContext.lookup(JMS_QUEUE_JNDI); 
     log.debug("Found destination {} in JNDI", JMS_QUEUE_JNDI); 

     try (JMSContext context = conFactory.createContext(JMS_USERNAME, JMS_PASSWORD)) { 
     ObjectMessage objMsg = context.createObjectMessage(); 
     objMsg.setObject(msg); 
     objMsg.setStringProperty("msgType", msgType); 

     log.info("Sending message with content msg={}, msgType={}", msg, msgType); 

     context.createProducer().send(destination, objMsg); 
     } 
    } catch (NamingException e) { 
     log.error("NamingException: {} {}", e.getMessage(), e); 
    } finally { 
     if(namingContext != null) { 
     try { 
      namingContext.close(); 
     } catch (NamingException e) { 
      log.error(e.getMessage()); 
     } 
     } 
    } 
    } 

    private static InitialContext getInitialContext() throws NamingException { 
    InitialContext context=null; 
    try { 
     Properties props = new Properties(); 
     props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); 
     props.put(Context.PROVIDER_URL, WILDFLY_REMOTING_URL); 
     props.put(Context.SECURITY_PRINCIPAL, JMS_USERNAME); 
     props.put(Context.SECURITY_CREDENTIALS, JMS_PASSWORD); 
     context = new InitialContext(props); 

     log.debug("Got initial Context: "+context); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return context; 
    } 

} 

這裏是例外,我在客戶端得到:

14:11:04.965 DEBUG [LoggerProviders.java:158] - Logging Provider: org.jboss.logging.Slf4jLoggerProvider 
14:11:04.966 INFO [Version.java:61] - WildFly Naming version 1.0.0.Beta13 
14:11:04.969 DEBUG [WildFlyJmsQueueSender.java:82] - Got initial Context: [email protected] 
14:11:04.969 DEBUG [WildFlyJmsQueueSender.java:42] - Attempting to acquire connection factory jms/RemoteConnectionFactory 
14:11:05.033 INFO [Xnio.java:95] - XNIO version 3.5.0.Beta2 
14:11:05.043 INFO [NioXnio.java:57] - XNIO NIO Implementation Version 3.5.0.Beta2 
14:11:05.069 DEBUG [WorkerThread.java:433] - Started channel thread 'XNIO-1 Accept', selector [email protected] 
14:11:05.069 DEBUG [WorkerThread.java:433] - Started channel thread 'XNIO-1 I/O-1', selector [email protected] 
14:11:05.081 INFO [EndpointImpl.java:97] - JBoss Remoting version 5.0.0.Beta19 
14:11:05.087 DEBUG [WorkerThread.java:433] - Started channel thread 'Remoting (anonymous) I/O-1', selector [email protected] 
14:11:05.087 DEBUG [WorkerThread.java:433] - Started channel thread 'Remoting (anonymous) Accept', selector [email protected] 
14:11:05.141 INFO [Version.java:57] - ELY00001: WildFly Elytron version 1.1.0.Beta33 
14:11:05.382 ERROR [WildFlyJmsQueueSender.java:60] - NamingException: {}WFNAM00018: Failed to connect to remote host 
javax.naming.CommunicationException: WFNAM00018: Failed to connect to remote host 
at org.wildfly.naming.client.remote.RemoteNamingProvider.getPeerIdentityForNaming(RemoteNamingProvider.java:65) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.remote.RemoteContext.lambda$lookupNative$0(RemoteContext.java:109) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.NamingProvider.performExceptionAction(NamingProvider.java:99) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.remote.RemoteContext.lookupNative(RemoteContext.java:108) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.AbstractFederatingContext.lookup(AbstractFederatingContext.java:78) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.AbstractFederatingContext.lookup(AbstractFederatingContext.java:64) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at org.wildfly.naming.client.WildFlyRootContext.lookup(WildFlyRootContext.java:144) ~[wildfly-naming-client-1.0.0.Beta13.jar:1.0.0.Beta13] 
at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[na:1.8.0_121] 
at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[na:1.8.0_121] 
at no.ipco.common.WildFlyJmsQueueSender.send(WildFlyJmsQueueSender.java:43) ~[ipco-common-jmsclient-0.1.jar:na] 

回答

0

我解決了這個問題。

首先我在MessageDrivenBean serverside中使用了@JMSDestinationDefinition。相反,我使用jboss-cli定義了隊列。

我獨立,full.xml配置文件現在有以下行添加

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

在客戶方我切換端口。我試圖telnet到8080(舊端口),那裏沒有開放,所以我嘗試了28080。修改clientcode到:

public final static String JMS_CONNECTION_FACTORY_JNDI="jms/RemoteConnectionFactory"; 
public final static String JMS_QUEUE_JNDI="jms/queue/SecServerQ"; 
public final static String JMS_USERNAME="jmsuser";  // The role for this user is "guest" in ApplicationRealm 
public final static String JMS_PASSWORD="jms2017Pwd!"; 
public final static String WILDFLY_REMOTING_URL="http-remoting://secserver.mydomain.com:28080"; 

該客戶端後,可以沒有任何異常和JMS消息連接開始流動。

相關問題