`

SpringBoot-第十三章 SpringBoot整合ActiveMQ

阅读更多

 

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

<dependency>
   <groupId>org.apache.activemq</groupId>
   <artifactId>activemq-pool</artifactId>
</dependency>

 

在调试过程中红色参数一定要设置为false。测试成true会报错。一直没有找到原因,TBD。

spring.activemq.broker-url=tcp://xxx.xxx.xxx.xxx:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=false
spring.activemq.pool.max-connections=100

 

启动类添加@EnableJms注解。JmsListenerContainerFactory用于支持既能订阅有能点对点。最后一段代码中用到

@EnableJms
……
@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerFactoryTopic(ConnectionFactory activeMQConnectionFacotry)
{
   DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
   bean.setPubSubDomain(true);
   bean.setConnectionFactory(activeMQConnectionFacotry);
   return bean;
}

 

public interface ProducterService {
    public void sendMessage(Destination destination, final String message);
    public void sendMessage(final String message);
    public void publish(final String msg);
}
@Service
public class ProducterServiceImpl implements ProducterService {
    @Autowired
private Queue queue;
    @Autowired
private JmsMessagingTemplate jmsTemplate;
    @Override
public void sendMessage(final String message)
    {
        jmsTemplate.convertAndSend(this.queue,message);
    }
    @Override
public void sendMessage(Destination destination, final String message)
    {
        jmsTemplate.convertAndSend(destination,message);
    }
    @Autowired
private Topic topic;
    @Override
public void publish(String msg)
    {
        jmsTemplate.convertAndSend(this.topic,msg);
    }
}

 

@RestController
@RequestMapping("/order")
public class OrderMQController {

    @Autowired
private ProducterService producter;

    @RequestMapping("/done")
    public Object order (String msg)
    {
         producter.sendMessage(msg);
         return "success";
    }
    @RequestMapping("/done1")
    public Object order1 (String msg)
    {
        Destination destination = new ActiveMQQueue("order.queue");
        producter.sendMessage(destination,msg);
        return "success";
    }

    @RequestMapping("/publish")
    public Object publishOrder(String msg)
    {
        producter.publish(msg);
        return "success";
    }
}

 

@Component
public class OrderConsumer {
    @JmsListener(destination = "order.queue")
    public void receiveQueue(String text)
    {
        System.out.println("OrderConsumers收到:"+text);
    }
}

 

@Component
public class TopicConsumer {
// @JmsListener如果不指定独立的containerFactory的话只能支持一直模式:或者是点对点,或者是消息订阅
@JmsListener(destination = "kevin.topic", containerFactory="jmsListenerContainerFactoryTopic")
    public void receiveTopic1(String text)
    {
        System.out.println("TopicConsumers1收到:"+text);
    }
    @JmsListener(destination = "kevin.topic", containerFactory="jmsListenerContainerFactoryTopic")
    public void receiveTopic2(String text)
    {
        System.out.println("TopicConsumers2收到:"+text);
    }
    @JmsListener(destination = "kevin.topic")
    public void receiveTopic3(String text)
    {
        System.out.println("TopicConsumers3收到:"+text);
    }
}

 

@Component
public class TopicConsumer {
// @JmsListener如果不指定独立的containerFactory的话只能支持一直模式:或者是点对点,或者是消息订阅
@JmsListener(destination = "kevin.topic", containerFactory="jmsListenerContainerFactoryTopic")
    public void receiveTopic1(String text)
    {
        System.out.println("TopicConsumers1收到:"+text);
    }
    @JmsListener(destination = "kevin.topic", containerFactory="jmsListenerContainerFactoryTopic")
    public void receiveTopic2(String text)
    {
        System.out.println("TopicConsumers2收到:"+text);
    }
    @JmsListener(destination = "kevin.topic")
    public void receiveTopic3(String text)
    {
        System.out.println("TopicConsumers3收到:"+text);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics