当我试图通过命令行侦听时,它工作得很好,但是使用Spring它会抛出以下错误:
ERROR [org.springframework.jms.listener.DefaultMessageListenerContainer] (DefaultMessageListenerContainer-1) Could not refresh JMS Connection for destination 'wfQueue' - retrying using FixedBackOff{interval=5000, currentAttempts=44, maxAttempts=unlimited}. Cause: authentication failed
javax.jms.JMSSecurityException: authentication failed
这是我的应用程序课
@SpringBootApplication(scanBasePackages = {"com.source.lbm"})
public class EMSConsumerApp {
public static main(String[] args){
run(EMSConsumerApp.class, args);
}
}
这个类配置JMS使用者的定义
@EnableJMS
@EnableTransactionManagement
public abstract class SubscriberConfiguration {
private final String url;
private final String clientId;
private final String username;
private final String password;
public SubscriberConfiguration(String url, String clientId, String username, String password) {
this.url = url;
this.clientId = clientId;
this.username = username;
this.password = password;
}
@Bean
public DefaultJmsListenerContainerFactory jsmListenerContainerFactory(ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory containerFactory = new DefaultJmsListenerContainerFactory();
containerFactory.setconnectionFactory(connectionFactory);
containerFactory.setPubSubDomain(true);
containerFactory.setSubscriptionDurable(true);
containerFactory.setSessionTransacted(true);
containerFactory.setAutoStartup(true);
return containerFactory;
}
@Bean
public ConnectionFactory jmsConnectionFactory() throws JMSException{
TibjmsXATopicConnectionFactory connectionFactory = new TibjmsXATopicConnectionFactory();
connectionFactory.setServerUrl(url);
connectionFactory.setClientId(clientId);
connectionFactory.setUserName(username);
connectionFactory.setUserPassword(password);
return connectionFactory;
}
}
这为订阅者设置了信任。
@Configuration
public class LbmSubConfiguration extends SubscriberConfiguration {
public LbmSubConfiguration(
@Value("${ems.lbm.sub.url}") String emsUrl;
@Value("${ems.lbm.sub.clientId}") String subClientId;
@Value("${ems.lbm.sub.username}") String subUsername;
@Value("${ems.lbm.sub.password}") String subPasword) {
super(emsUrl,subClientId,subUsername,subPasword);
}
}
此类侦听ems并使用消息。
@Component
public class LbmEventConsumer {
@JmsListener(destination = "${ems.lbm.sub.destination}", containerFactory = "jmsListenerContainerFactory")
public void onMessage(BytesMessage message){
System.out.println("Message " + message);
}
}
由于这些凭据在命令行上运行良好,因此凭据不应出现问题。可能是因为我漏掉了一些吐露(虽然不确定)。你能帮我弄清楚这是怎么回事吗?
发布于 2021-06-21 10:56:43
这段代码运行良好,我错过了在scanBasePackage配置中添加SubscriberConfiguration的包。
发布于 2021-06-15 06:49:44
看看@JmsListener
@JmsListener(destination = "${ems.lbm.sub.destination}",
containerFactory = "jmsListenerContainerFactory")
在那里您设置了"jmsListenerContainerFactory“,将其更改为"jmsConnectionFactory”
@JmsListener(destination = "${ems.lbm.sub.destination}",
containerFactory = "jmsConnectionFactory")
https://stackoverflow.com/questions/67973204
复制相似问题