SpringBoot2.0整合ActiveMQ

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot2.0整合ActiveMQ

【1】pom文件

添加ActiveMQ依赖:

<!--整合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>

【2】yml配置

yml配置文件如下:

spring:
    activemq:
      user: root
      password: 123456
      broker-url: tcp://127.0.0.1:61616
      pool:
        enabled: true
        max-connections: 50
      packages:
        trust-all: true

【3】生产者消费者队列

主程序类配置如下:

@SpringBootApplication
@EnableJms //ActiveMQ
public class HhProvinceApplication {
  public static void main(String[] args) {
    SpringApplication.run(HhProvinceApplication.class, args);
  }
}

MyActiveMQConfig如下:

@Configuration
public class MyActiveMQConfig {
    @Bean
    public Queue logQueue() {
        return new ActiveMQQueue("app.log");
    }
}

生产者示例:

@Service
public class SysVisitLogServiceImpl implements ISysVisitLogService {
  private static final Logger log = LoggerFactory.getLogger(SysVisitLogServiceImpl.class);
  @Autowired
  private JmsMessagingTemplate jmsMessagingTemplate;
  @Autowired
  private Queue logQueue;
  /* 日志插入 */
  public void insertVisitLog(SysVisitLog sysVisitLog) {
    log.debug("insertVisitLog :收到请求,开始调用队列插入访问日志--"+sysVisitLog);
    jmsMessagingTemplate.convertAndSend(logQueue, sysVisitLog);
  }
}

消费者示例:

@Service
public class ConsumerListener {
  private static final Logger log = LoggerFactory.getLogger(ConsumerListener.class);  
  @Autowired
  SysVisitLogMapper visitLogMapper;
  @JmsListener(destination="app.log")
  @Transactional(rollbackFor={Exception.class})
  public void insertVisitLog(SysVisitLog sysVisitLog){
    int i = visitLogMapper.insertSelective(sysVisitLog);
    log.info("消费者插入日志成功 i:"+i+"--sysVisitLog : "+sysVisitLog);
  }
}

【4】以前SSM下使用ActiveMQ

以前在SSM(SpringMVC Spring MyBatis)下主要使用xml对ActiveMQ进行配置,代码中生产者和消费者同样使用注解。

ActiveMQ xml配置如下:

  <!--这个是队列目的地,点对点的-->
  <bean id="InsertVisitLogQueue" class="org.apache.activemq.command.ActiveMQQueue">
       <constructor-arg>
           <value>InsertVisitLogQueue</value>
       </constructor-arg>
  </bean> 
  <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">    
        <property name="connectionFactory">    
          <bean class="org.apache.activemq.ActiveMQConnectionFactory">    
          <property name="brokerURL" value="tcp://127.0.0.1:61616" />
          <property name="userName" value="root" />
          <property name="password" value="123456" />
          <property name="useAsyncSend" value="true" /> 
          <property name="trustAllPackages" value="true"/>
          </bean>    
      </property> 
  </bean>
  <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
      <property name="connectionFactory" ref="connectionFactory"/>
      <property name="receiveTimeout" value="2000" />
  </bean>
  <!-- 支持@JmsListener自动启动监听器 -->
  <jms:annotation-driven/>
  <bean id="jmsListenerContainerFactory"  class="org.springframework.jms.config.DefaultJmsListenerContainerFactory">
       <property name="connectionFactory" ref="connectionFactory"/>
  </bean>

对比SpringBoot2.0,可以发现简化了很多配置。


生产者示例:

@Service
public class SysVisitLogServiceImpl implements ISysVisitLogService {
  private static final Logger log = LoggerFactory.getLogger(SysVisitLogServiceImpl.class);
  @Autowired
    private JmsTemplate jmsTemplate;
  @Qualifier("InsertVisitLogQueue")
  @Autowired
  private Destination destinationInsertVisitLogQueue;
  /* 插入tb_sys_visit_log */
  @Override
  public void insertVisitLog(SysVisitModel sysVisitModel) {
    log.debug("insertVisitLog :收到请求,开始调用队列插入访问日志--"+sysVisitModel);
    new Thread(new Runnable(){
      @Override
      public void run() {
        jmsTemplate.send(destinationInsertVisitLogQueue, new MessageCreator() {
          @Override
          public Message createMessage(Session session) throws JMSException {
            ActiveMQObjectMessage msg = (ActiveMQObjectMessage) session.createObjectMessage(); 
                    msg.setObject(sysVisitModel);
                    /* 一分钟后插入访问日志 */
                    long delay = 60 * 1000;
                    msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
            return msg;   
          } 
        }); 
      }}).start();
  }
}

消费者示例:

@Service
public class ConsumerListener {
  @JmsListener(destination="InsertVisitLogQueue",concurrency="10-20")
  @Transactional(rollbackFor={Exception.class})
  public void insertVisitLog(SysVisitModel sysVisitModel){
    log.info("消费者获取到的sysVisitModel : "+sysVisitModel+Thread.currentThread().getName());
    //...
    }
}

pom依赖:

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

ActiveMQ安装:https://blog.csdn.net/j080624/article/category/7358806


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
消息中间件 Java Kafka
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
|
4月前
|
消息中间件 监控 Java
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
419 3
|
3月前
|
消息中间件 Java Apache
使用Spring Boot实现与ActiveMQ的消息队列集成
使用Spring Boot实现与ActiveMQ的消息队列集成
|
消息中间件 Java
springboot整合ActiveMQ(点对点+发布订阅)
springboot整合ActiveMQ(点对点+发布订阅)
|
5月前
|
消息中间件 Java
SpringBoot使用ActiveMq同时支持点对点推送和发布订阅
SpringBoot使用ActiveMq同时支持点对点推送和发布订阅
39 0
|
5月前
|
消息中间件 Java Kafka
SpringBoot整合 ActiveMQ快速入门 实现点对点推送
SpringBoot整合 ActiveMQ快速入门 实现点对点推送
65 0
|
12月前
|
消息中间件 Java 测试技术
53分布式电商项目 - Spring集成ActiveMQ
53分布式电商项目 - Spring集成ActiveMQ
29 0
|
消息中间件 Java Spring
ActiveMQ整合springboot
ActiveMQ整合springboot
|
消息中间件 Java
SpringBoot整合ActiveMq实现Queue和Topic两种模式
SpringBoot整合ActiveMq实现Queue和Topic两种模式
131 4
SpringBoot整合ActiveMq实现Queue和Topic两种模式
|
消息中间件 缓存 NoSQL
Spring Boot+MyBatis+Redis+ActiveMQ+MySQL+Thymeleaf实现简单的高并发点赞功能(下)
Spring Boot+MyBatis+Redis+ActiveMQ+MySQL+Thymeleaf实现简单的高并发点赞功能(下)
372 0
Spring Boot+MyBatis+Redis+ActiveMQ+MySQL+Thymeleaf实现简单的高并发点赞功能(下)