首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法为目标刷新JMS连接,原因是:身份验证失败

无法为目标刷新JMS连接,原因是:身份验证失败
EN

Stack Overflow用户
提问于 2021-06-14 15:33:20
回答 2查看 11.9K关注 0票数 0

当我试图通过命令行侦听时,它工作得很好,但是使用Spring它会抛出以下错误:

代码语言:javascript
运行
复制
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

这是我的应用程序课

代码语言:javascript
运行
复制
@SpringBootApplication(scanBasePackages = {"com.source.lbm"})
public class EMSConsumerApp {

    public static main(String[] args){
        run(EMSConsumerApp.class, args);         
    }
}

这个类配置JMS使用者的定义

代码语言:javascript
运行
复制
@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;        
    }
        
}

这为订阅者设置了信任。

代码语言:javascript
运行
复制
@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并使用消息。

代码语言:javascript
运行
复制
@Component
public class LbmEventConsumer {
    @JmsListener(destination = "${ems.lbm.sub.destination}", containerFactory = "jmsListenerContainerFactory")
    public void onMessage(BytesMessage message){
      System.out.println("Message " + message);
    }
}

由于这些凭据在命令行上运行良好,因此凭据不应出现问题。可能是因为我漏掉了一些吐露(虽然不确定)。你能帮我弄清楚这是怎么回事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-21 10:56:43

这段代码运行良好,我错过了在scanBasePackage配置中添加SubscriberConfiguration的包。

票数 0
EN

Stack Overflow用户

发布于 2021-06-15 06:49:44

看看@JmsListener

代码语言:javascript
运行
复制
@JmsListener(destination = "${ems.lbm.sub.destination}", 
             containerFactory = "jmsListenerContainerFactory")

在那里您设置了"jmsListenerContainerFactory“,将其更改为"jmsConnectionFactory”

代码语言:javascript
运行
复制
@JmsListener(destination = "${ems.lbm.sub.destination}", 
             containerFactory = "jmsConnectionFactory")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67973204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档