SpringBoot整合ActiveMq要分以下几个步骤:
第一步:从ActiveMq官方上下载ActiveMq服务
下载地址:http://activemq.apache.org/download.html
我当前下载的是版本是5.15.3 官方备注:当前最新的稳定版本。
解压成功后,我们会看到这样的目录结构:
第二步:运行ActiveMq服务
这里要注意的地方,是运行64位的还是32位的,根据个人电脑来确定,
运行后会得到如下图所有的信息:
浏览器中访问:http://127.0.0.1:8161 用户名与密码都是admin
第三步:创建SpringBoot项目
小编第一次遇到的问题做测试:
部分pom.xml
<!-- Maven POM文件继承 spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
第四步:创建SpringBoot项目的主函数
package com;
import org.apache.activemq.command.ActiveMQQueue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
@Bean
public ActiveMQQueue queue() {
return new ActiveMQQueue("promoteAct");
}
protected static Logger logger=LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
logger.info("SpringBoot Start Success");
}
}
第五步:创建SpringBoot项目的生产者与消费者
生产者:
package com.mq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.jms.Queue;
/**
* describe:
*
* @author laizhihui
* @date 2018/02/28
*/
@Component
@EnableScheduling
public class PromoteActProducer {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@Scheduled(fixedDelay = 2000) // 每2s执行1次
public void send() {
this.jmsMessagingTemplate.convertAndSend(this.queue, "hello,activeMQ");
}
}
消费者:
package com.mq;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
/**
* describe:
*
* @author laizhihui
* @date 2018/02/28
*/
@Component
public class PromoteActConsumer {
/**
* 客户端消费
* @param consumer
*/
@JmsListener(destination = "promoteAct")
public void receiveQueue(String consumer) {
System.out.println(consumer+"消息已经消费了");
}
}
注:这里不修改任何关于ActiveMq的配置。
结果如下:
我们发现,该消息已经成功的在生产和消费啦,那我们去浏览器中查看一下我们所消费的数据
当时我有点懵逼,这啥情况啊,我不是启动了ActiveMq的服务了嘛? 为何这队列中没有任何消费记录啊,这里我去查看了一个SpringBoot的启动日志才发现,在SpringBoot启动时,在本地开启了一个ActiveMq服务,那就明白了,原来我之前启动的服务就没连接上。
当时我有点懵逼,这啥情况啊,我不是启动了ActiveMq的服务了嘛? 为何这队列中没有任何消费记录啊,这里我去查看了一个SpringBoot的启动日志才发现,在SpringBoot启动时,在本地开启了一个ActiveMq服务,那就明白了,原来我之前启动的服务就没连接上。
那如何解决这个问题呢,下面我们就要有请application.properties配置文件了,
修改配置文件:(这段配置是从网上找的)
spring.activemq.broker-url=tcp://127.0.0.1:61616
spring.activemq.in-memory=false
#true表示使用连接池
spring.activemq.pool.enabled=true
#连接池最大连接数
spring.activemq.pool.max-connections=5
#空闲的连接过期时间,默认为30秒
spring.activemq.pool.idle-timeout=30000
#强制的连接过期时间,与idleTimeout的区别在于:idleTimeout是在连接空闲一段时间失效,而expiryTimeout不管当前连接的情况,只要达到指定时间就失效。默认为0,never
spring.activemq.pool.expiry-timeout=0
再次启动服务,发现怎么无法启动了
解决方案:
在pom.xml中引用 这时就可以正常启动了
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
这次我们发现,我们启动的服务已经在服务器中被监听了。