@SendTo Annotation 对于 ActiveMQ 静默失败

Posted

技术标签:

【中文标题】@SendTo Annotation 对于 ActiveMQ 静默失败【英文标题】:@SendTo Annotation fails silently for ActiveMQ 【发布时间】:2018-11-07 20:12:26 【问题描述】:

我正在尝试使用 @SendTo 注释将 JMS 消息推送到 SpringBoot 应用程序中的独立 ActiveMQ 代理,但是执行完成时没有错误/异常,但消息没有排队。相反,如果我使用 JmsTemplate(在代码中注释),则消息会排队。使用@SendTo 是否需要任何其他配置。我在这里做错了什么?

application.properties

spring.activemq.broker-url= tcp://localhost:61616
spring.activemq.user= admin
spring.activemq.password= admin
spring.activemq.pool.enabled= false

Spring Boot 应用程序

@SpringBootApplication
public class MyCustomRouterApplication 
    public static void main(String[] args) throws Exception 
        SpringApplication.run(MyCustomRouterApplication.class, args);
    

服务方式

@Service
public class NotificationServiceImpl implements NotificationService 

    //@Autowired
    //JmsTemplate jmsTemplate;

    @Override
    @SendTo("inboundSyncQueue")
    public Map<String, Object> enqueueExchangeNotification(ExchangeNotification notification, String tenantId) throws RuntimeException 

        Map<String, Object> jmsMessage = new HashMap<String, Object>();
        jmsMessage.put("tenantId", tenantId);
        jmsMessage.put("source", ExternalNotificationSource.EXCHANGE);
        jmsMessage.put("payload", notification);
        //jmsTemplate.convertAndSend("inboundSyncQueue", notification);
        return jmsMessage;
    


ma​​ven pom

<dependencies>
   <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring-boot-starter</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <scope>runtime</scope>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-activemq</artifactId>
   </dependency>
   <!-- Required for ActiveMQ JMS Consumer -->
   <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-camel</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
   </dependency>
   <!-- Required for Guava In-memory Cache -->
   <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>21.0</version>
   </dependency>
   <!-- Required for String Utilities -->
   <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.7</version>
   </dependency>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-messaging</artifactId>
   </dependency>
</dependencies>

【问题讨论】:

【参考方案1】:

我在生产者处使用了 jmsTemplate 而不是 @sendTo 。下面是一个方法。 jmsTemplate.convertAndSend(destinationQueue, message);

注意:这是一种解决方法。

【讨论】:

这就是我最终要做的。使用注解的目的是避免 jmsTemplate 的样板编码,让 spring 管理它

以上是关于@SendTo Annotation 对于 ActiveMQ 静默失败的主要内容,如果未能解决你的问题,请参考以下文章

ACT有预考吗?关于PreACT的小科普

ping: sendto: No route to host

动态 SendTo 注释

Annotation自定义注解

UDP sendto 永远不会失败

我收到此错误:stream_socket_sendto() ...未提供地址