Pom依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 整合acriveMq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
- 下载ActiveMq 安装包:
- 解压安装包
tar -zxvf apache-activemq-5.15.8-bin.tar.gz
- 配置环境变量:vim /etc/profile
export ACTIVEMQ_HOME=/usr/local/apache-activemq-5.13.3
export ACTIVEMQ_BIN=$ACTIVEMQ_HOME/bin
export PATH=${PATH}:${ACTIVEMQ_BIN}
保存文件,配置立即生效:
source /etc/profile
- 启动和停止ActiveMQ
./activemq start #启动
./activemq stop #停止
- 修改activeMQ 的端口号:
进入activeMQ 的conf 目录:
#编辑activeMQ 配置文件
vim activemq.xml
查找transportConnectors:
找到name=“openwire” uri="tcp://0.
修改端口号即可:
- 修改管理页面的8161端口:
修改jetty.xml,修改内容容器jetty的默认启动端口,找到默认的8161后修改
- application.properties 文件
#整合ActiveMQ
spring.activemq.broker-url=tcp://192.168.203.137:61616
spring.activemq.in-memory=true
spring.activemq.password=admin
spring.activemq.user=admin
#如果此处设置为true 需要加下面的依赖包,否则会自动配置失败,JmsMessagingTemplate
spring.activemq.pool.enabled=false
- 定义生产者:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Destination;
import java.util.Map;
/**
* @author Donald
* @create 2019-01-27 22:23
*/
@Component
public class Produce {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
//发送 消息
public void sendMessage(Destination des, String message){
jmsMessagingTemplate.convertAndSend(des,message);
}
//发送复杂对象尝试
public void sendPOJO(Destination des, Map<String, String> map){
jmsMessagingTemplate.convertAndSend(des,map);
}
}
- 定义消费者:
package com.feifan.activemq;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.feifan.vo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.Map;
/**
* @author Donald
* @create 2019-01-27 22:27
*/
@Component
public class consumer {
private static final Logger LOGGER = LoggerFactory.getLogger(consumer.class);
@JmsListener(destination = "myqueue")//时时刻刻监听消息队列,目的地名称额
public void receviceMsg(String text){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info("message:{}<<<<<<<:{}",text,Thread.currentThread().getName());
}
@JmsListener(destination = "myqueue")//时时刻刻监听消息队列,目的地名称额
public void receviceMsg2(String text){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
LOGGER.info("message:{}>>>>>>>:2{}",text,Thread.currentThread().getName());
}
@Autowired
private ObjectMapper objectMapper;
@JmsListener(destination = "POJO")
public void getUser(Map<String,String> map){
LOGGER.info("{}",map);
for (Map.Entry<String,String> entry:map.entrySet()) {
try {
User user = objectMapper.readValue(entry.getValue(), User.class);
LOGGER.info("{}",user);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
- 测试控制层类:
@Autowired
private Produce produce;
@ResponseBody
@RequestMapping("activeMQ")
public String activeMQ(){
//点对点消息 1:1
Destination des =new ActiveMQQueue("myqueue");//指定存放消息队列的名称
for(int i=0;i<50;i++){
produce.sendMessage(des,"你是哪个呦"+i);
}
return "OK produce message";
}
@Autowired
private ObjectMapper objectMapper;
@ResponseBody
@RequestMapping("activeMQP")
public String activeMQP(){
//复杂对象一对一消息机制
Destination destination = new ActiveMQQueue("POJO");//指定消息对列的名称
User user = null;
Map<String,String> map = new HashMap<>();
for (int i = 0; i < 50; i++) {
user = new User();
user.setId(i);
user.setUsername(String.valueOf(i));
user.setBrithday(new Date());
user.setAge(i);
user.setEmail(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
try {
map.put(String.valueOf(i),objectMapper.writeValueAsString(user));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
produce.sendPOJO(destination,map);
}
return "ActiveMQ 发送 消息对列正确";
}
直接对象传值有待后期验证:》》》