springboot集成activemq消息队列

时间:2019-02-14
本文章向大家介绍springboot集成activemq消息队列,主要包括springboot集成activemq消息队列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

依赖及配置

1、pom中引用依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
    <version>1.5.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>5.15.3</version>
</dependency>

2、application.properties 添加acitivemq配置

spring.activemq.broker-url=tcp://127.0.0.1:61616
spring.activemq.in-memory=false
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=5
spring.activemq.pool.idle-timeout=30000
spring.activemq.pool.expiry-timeout=0

发布消息

消息提供者 IJmsProducer.java

/**
 * 消息提供者接口
 * @author zhangql
 * @date 2018/10/25
 */
public interface IJmsProducer {

    /**
     * 发送消息(发布-订阅模式)
     * @param destination
     * @param message
     */
    void sendMessageToTopic(String destination, String message);

    /**
     * 发送消息(点对点)
     * @param destination
     * @param message
     */
    void sendMessageToQueue(String destination, String message);
}

消息提供者实现

@Service
public class JmsProducerImpl implements IJmsProducer {

    @Autowired
    private JmsTemplate jmsTemplate;

    @Override
    public void sendMessageToTopic(String destination, final String message) {
        jmsTemplate.convertAndSend(new ActiveMQTopic(destination), message);
    }

    @Override
    public void sendMessageToQueue(String destination, final String message) {
        jmsTemplate.convertAndSend(new ActiveMQQueue(destination), message);
    }
}

消息消费者

1、JmsConfig

@Configuration
@EnableJms
public class JmsConfig {

    @Bean
    public JmsListenerContainerFactory<?> topicListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(true);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }

    @Bean
    public JmsListenerContainerFactory<?> queueListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(false);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
}

2、方法上增加注解@JmsListener,destination为目的地字符串,对应发送接口入参中的destination,第二个为消息的类型对应JmsConfig中的配置。topicListenerFactory为发布订阅模式,queueListenerFactory为点对点模式

@JmsListener(destination = "destination ", containerFactory = "topicListenerFactory")