本文介绍SpringBoot相关内容。和【跨考菌】一起加油吧~
如果你有收获,记得帮博主一键三连哦😊
1 消息队列概述
1.1 消息对应的应用场景
1.2 RabbitMQ简介
1.3 RabbitMQ运行机制
2 Rabbit环境搭建
2.1 docker镜像加速
将docker修改为国内镜像源
在/etc/docker/daemon.json
文件中添加下面参数
{
"registry-mirrors" : ["https://docker.mirrors.ustc.edu.cn"]
}
重启docker:service docker restart
2.2 docker安装RabbitMQ
拉取rabbitmq的镜像:
docker pull rabbitmq:3-management
查看镜像:
[root@kafka2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/rabbitmq 3-management 800294d91e31 2 weeks ago 198 MB
jpress latest 773e1fd1b1b9 2 months ago 313 MB
nginx v3 89f9edd3eb63 2 months ago 133 MB
<none> <none> afebc12a7cbe 2 months ago 72.9 MB
docker.io/mysql latest 4f1413420360 2 months ago 545 MB
hub.c.163.com/library/tomcat latest 72d2be374029 3 years ago 292 MB
hub.c.163.com/library/nginx latest 46102226f2fd 3 years ago 109 MB
启动rabbitmq并配置开机自启动:
docker run -d -p 5672:5672 -p 15672:15672 --name --restart=always myrabbitmq 800294d91e31
对外暴露端口:
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --reload
测试访问:
2.3 测试
2.3.1 添加exchange
2.3.2 添加binding
2.3.3 添加queue
2.3.4 测试点对点模式
3 springboot整合RabbitMQ
3.1 引入rabbitmq依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3.2 配置application.yml
spring.rabbitmq.host=192.168.229.140
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#spring.rabbitmq.virtual-host=
3.3 消息发布-接收测试
@Autowired
RabbitTemplate rabbitTemplate;
/**
* 1、单播(点对点)
*/
@Test
public void contextLoads() {
//Message需要自己构造一个;定义消息体内容和消息头
//rabbitTemplate.send(exchage,routeKey,message);
//object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq;
//rabbitTemplate.convertAndSend(exchage,routeKey,object);
Map<String,Object> map = new HashMap<>();
map.put("msg","这是第一个消息");
map.put("data", Arrays.asList("helloworld",123,true));
//对象被默认序列化以后发送出去
rabbitTemplate.convertAndSend("exchange.direct","atguigu.emps",new Book("西游记","吴承恩"));
}
//接受数据,如何将数据自动的转为json发送出去
@Test
public void receive(){
Object o = rabbitTemplate.receiveAndConvert("atguigu.emps");
System.out.println(o.getClass());
System.out.println(o);
}
/**
* 广播
*/
@Test
public void sendMsg(){
rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
}
如何将消息以json格式发布出去?
只需要将MessageConverter
换为json格式的即可:
@Configuration
public class MyAMQPConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
3.4 @RabbitListener和@EnableRabbit
@EnableRabbit //开启基于注解的RabbitMQ模式
@SpringBootApplication
public class Springboot02AmqpApplication {}
开启监听:
@Service
public class BookService {
@RabbitListener(queues = "atguigu.news")
public void receive(Book book){
System.out.println("收到消息:"+book);
}
@RabbitListener(queues = "atguigu")
// 获取消息的详细信息
public void receive02(Message message){
System.out.println(message.getBody());
System.out.println(message.getMessageProperties());
}
}
3.5 AmqpAdmin
AmqpAdmin负责创建exchange、queue和binding等内容。
amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange")); // 创建exchange
System.out.println("创建完成");
amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true)); // 创建queue
//创建绑定规则
amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null)); // 创建绑定关系