概述
消息服务中间件(如RabbitMQ)可用于异步处理、流量削峰等
RabbitMQ 运行机制

Exchange 类型
分发消息时根据其类型的不同有不同的分发策略:
- direct:消息中的routing key和队列的routing key一致的队列接受
- fanout:广播,所有队列都能接受
- topic:类似模糊匹配
RabbitMQ测试
# 安装
docker pull rabbitmq:3-management
# 运行
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像id
# 浏览器访问
服务器ip:15672
RabbitTemplate
自定义消息转换器,将数据序列化为json
@Configuration
public class MyAMQPConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
测试发送和接受消息
@Autowired
RabbitTemplate rabbitTemplate;
@Test
void send() {
HashMap<String, Object> map = new HashMap<>();
rabbitTemplate.convertAndSend("ex-direct","atguigu.news",new Book("入门到入坑","ccb"));
}
@Test
void receive(){
Object obj = rabbitTemplate.receiveAndConvert("atguigu.news");
System.out.println(obj);
}
监听消息队列
@SpringBootApplication
@EnableRabbit // 启用监听
public class Springboot2Application {
public static void main(String[] args) {
SpringApplication.run(Springboot2Application.class, args);
}
}
@Service
public class BookService {
@RabbitListener(queues = "atguigu.news")
public void receive(Object obj){
System.out.println("收到消息:"+obj);
}
}
AmqpAdmin
RabbitMQ 系统管理功能组件,可创建和删除 Queue,Exchange,Binding
@Autowired
AmqpAdmin amqpAdmin;
@Test
void create(){
amqpAdmin.declareExchange(new DirectExchange("ex-admin"));
amqpAdmin.declareQueue(new Queue("admin.queue",true));
amqpAdmin.declareBinding(new Binding("admin.queue",Binding.DestinationType.QUEUE,"ex-admin","admin.hahha",null));
}
来源:oschina
链接:https://my.oschina.net/codeccb/blog/4505819