Java 无法从Spring引导应用程序连接到SonicMQ 7.6
在连接到Sonic Broker时,我确实喜欢下面的方法,效果很好Java 无法从Spring引导应用程序连接到SonicMQ 7.6,java,spring-boot,spring-jms,sonicmq,Java,Spring Boot,Spring Jms,Sonicmq,在连接到Sonic Broker时,我确实喜欢下面的方法,效果很好 TopicConnectionFactory factory = new progress.message.jclient.TopicConnectionFactory(brokerURL); TopicConnection connection = factory.createTopicConnection(brokerUserName, brokerPassword); ja
TopicConnectionFactory factory = new progress.message.jclient.TopicConnectionFactory(brokerURL);
TopicConnection connection = factory.createTopicConnection(brokerUserName, brokerPassword);
javax.jms.TopicSession subSession = (TopicSession) connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
javax.jms.Topic topic = subSession.createTopic(topicNameToListen);
MessageConsumer subscriber = subSession.createSubscriber(topic);
subscriber.setMessageListener(msgListener);
connection.start();
所以当我用spring boot做这件事的时候
@Bean
TopicConnectionFactory connectionFactory() throws JMSException {
TopicConnectionFactory factory = new progress.message.jclient.TopicConnectionFactory(brokerURL);
TopicConnection connection = factory.createTopicConnection(brokerUserName, brokerPassword);
connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
return factory;
}
@Bean
JmsListenerContainerFactory<?> myJmsContainerFactory(ConnectionFactory connectionFactory) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
return factory;
}
@JmsListener(destination = "topic.name.for.receiving.message", containerFactory = "myJmsContainerFactory")
public void messageReceiver(String message) {
LogService.info(this.getClass().getName(), "A Message Received");
LogService.info(this.getClass().getName(), message);
}
注意:我已经检查了很多次凭据,并且使用以前的代码运行了它,它工作正常。此外,我还添加了sonic_Client.jar、sonic_Crypto.jar和sonic_XMessage.jar
。如果我尝试使用spring boot,就会出现此错误
造成这种情况的原因是什么?第二个bean是无用的。我们将只绑定到任何可用的
ConnectionFactory
。第一颗豆子很奇怪。你正在创建一个连接和一个会话,然后你什么都不做。您需要设置spring.jms.pub sub-domain=true
,因为它是一个主题。身份验证问题与Spring引导无关。您需要仔细查看您的代码。@StéphaneNicoll:我删除了不必要的bean,应用程序现在启动。但是定时jms连接刷新程序无法解析目标。我想我误解了目的地。我把它当作主题名。。我错了吗?这是你的主题吗?我不知道SonicMQ是如何解决它的目的地的。也许您需要定义一个DestinationResolver
?无论如何,你原来的问题与你的情况不符,所以你可能应该重新措辞。第二个bean是无用的。我们将只绑定到任何可用的ConnectionFactory
。第一颗豆子很奇怪。你正在创建一个连接和一个会话,然后你什么都不做。您需要设置spring.jms.pub sub-domain=true
,因为它是一个主题。身份验证问题与Spring引导无关。您需要仔细查看您的代码。@StéphaneNicoll:我删除了不必要的bean,应用程序现在启动。但是定时jms连接刷新程序无法解析目标。我想我误解了目的地。我把它当作主题名。。我错了吗?这是你的主题吗?我不知道SonicMQ是如何解决它的目的地的。也许您需要定义一个DestinationResolver
?无论如何,你原来的问题与你的情况不符,所以你可能应该重新措辞。
javax.jms.JMSSecurityException: Inauthentic Client
at progress.message.jimpl.JMSExceptionUtil.createJMSSecurityException(JMSExceptionUtil.java:134)
at progress.message.jimpl.JMSExceptionUtil.createJMSSecurityException(JMSExceptionUtil.java:117)
at progress.message.jimpl.JMSExceptionUtil.createJMSSecurityException(JMSExceptionUtil.java:103)
at progress.message.jimpl.Connection.<init>(Connection.java:836)
at progress.message.jclient.ConnectionFactory.createConnection(ConnectionFactory.java:2110)
at progress.message.jclient.ConnectionFactory.createConnection(ConnectionFactory.java:2083)