在 Spring-Boot 应用程序中收到错误“原因:AMQ119031:无法验证用户”

Spa*_*tan 3 spring-jms spring-boot microservices activemq-artemis jboss-eap-7

当我尝试连接到 JBoss EAP 7.1 上部署的 ActiveMQ Artemis Queue 时,出现以下错误。

错误:DefaultMessageListenerContainer:无法刷新目标“jms/queue/QueueA”的 JMS 连接 - 使用 FixBackOff{interval=5000、currentAttempts=139、maxAttempts=unlimited} 重试。原因:AMQ119031:无法验证用户

这是我正在使用的代码:

@Bean public DefaultMessageListenerContainer myFactory() throws NamingException { 
   DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
   listenerContainer.setConnectionFactory(getConnectionFactory());
   listenerContainer.setDestinationName("jms/queue/QueueA");
   listenerContainer.setMessageListener(new MessageReceiver());
   return listenerContainer; 
}

private ConnectionFactory getConnectionFactory() throws NamingException { 
   final Properties env = new Properties();
   env.put(Context.INITIAL_CONTEXT_FACTORY, org.wildfly.naming.client.WildFlyInitialContextFactory); 
   env.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); 
   env.put(Context.SECURITY_PRINCIPAL, "Username"); 
   env.put(Context.SECURITY_CREDENTIALS, "Password"); 
   InitialContext ic = new InitialContext(env); 
   return (ConnectionFactory) ic.lookup("jms/RemoteConnectionFactory");
}
Run Code Online (Sandbox Code Playgroud)

Jus*_*ram 5

正如错误消息(即AMQ119031: Unable to validate user)所示,您在创建 JMS 连接时没有提供正确的凭据。

您在 JNDI 查找属性中提供的用户名和密码信息适用于 JNDI 查找(即不适用于 JMS 连接)。JNDI 和 JMS 彼此 100% 独立。

您必须使用 JMS 用户名和密码配置适当的 Spring 组件,以便在调用javax.jms.ConnectionFactory.createConnection(String,String)javax.jms.ConnectionFactory.createContext(String,String)时可以使用它。UserCredentialsConnectionFactoryAdapter尝试从您的方法返回一个实例getConnectionFactory()