本例环境:
1>.Linux操作系统安装docker
2>.使用docker安装RabbitMQ
本例源码demo: https://github.com/zhangbeizhen/springboot-rabbitmq
1.安装RabbitMQ
<1>.下载镜像
docker pull rabbitmq:3-management
<2>.查看镜像id
docker images
<3>.首次安装并启动RabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像id
解析:
docker: docker技术专用命令
run: 启动
-d: 后台启动
-p 5672:5672 虚拟机端口映射到docker容器端口
--name myrabbitmq 给启动的服务命名
其中:5672:客户端和RabbitMQ通信端口
15672:浏览器控制台与RabbitMQ通信端口
<4>.查看容器id
docker ps -a
<5>.在执行第<3>后启动方式
docker start 容器id
2.在控制台登入<本例>
http://172.16.4.156:15672
guest/guest
截图:
3.在浏览器控制台创建Exchanges
名称: emp.direct
截图:
:
4.在浏览器控制台创建Queues
名称: emp.Queue
截图:
5.在浏览器控制台关联Exchanges和Queues
选中创建好的emp.direct进行关联
路由键名称: empRoutingKey
截图:
6.在SpringbootRabbitmqApplicationTests类中插入测试数据
在test目录下测试方法中,写入一条数据到消息队列
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootRabbitmqApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
public void testEmpQueue() {
rabbitTemplate.convertAndSend("emp.direct","empRoutingKey",new Employee("zbz","程序猿"));
}
}
7.在application.properties中配置
spring.rabbitmq.host=172.16.4.156
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
8.在SpringbootRabbitmqApplication类上加注解
@EnableRabbit /**开启基于注解的RabbitMQ模式*/
@SpringBootApplication
public class SpringbootRabbitmqApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRabbitmqApplication.class, args);
}
}
9.在EmployeeService类监听队列服务
@Service
public class EmployeeService {
/**监听队列*/
@RabbitListener(queues = "emp.Queue")
public void receiveInfo(Employee emp){
System.out.println("队列emp.Queue接收一条数据开始......");
System.out.println("收到消息:"+emp);
System.out.println("员工姓名:"+emp.getName());
System.out.println("职位:"+emp.getWork());
System.out.println("队列emp.Queue接收一条数据结束......");
}
}
10.在MyRabbitmqConfig类自定自动配置类
@Configuration
public class MyRabbitmqConfig {
/**主要用于对象序列化*/
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
11.实体对象Employee
public class Employee {
public Employee() {
}
public Employee(String name, String work) {
this.name = name;
this.work = work;
}
private String name;
private String work;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWork() {
return work;
}
public void setWork(String work) {
this.work = work;
}
}
12.测试流程
1>.SpringbootRabbitmqApplicationTests插入数据
2>.监听服务监听队列并打印数据
以上,TKS.