JMS&AMQP的简介
RabbitMQ运行机制
direct:点对点 交换机根据路由键发送消息
fanout:交换机给每个队列发送消息
topic:给指定规则的队列发送消息 #匹配一个或多个单词 *匹配一个单词
Exchange(分发策略) --> 绑定Queue --> 绑定规则
点对点
广播模式:
SpringBoot&AMQP 使用
1、在SpringBoot启动类上面标注
@EnableRabbit //开启基于注解的rabbitmq
2、监听消息队列
@RabbitListener(queues="zm.news") //监听消息队列
方法入参默认是一个RabbitMQ的Message类型
AMQP的新建操作
@Test
public void createExchange(){
//新建交换器//名称//是否持久化//是否自动删除
admin.declareExchange(newDirectExchange("amqp.exchange",true,false));
System.out.println("amqp.exchange");
//新建队列
Strings=admin.declareQueue(newQueue("admin.queue"));
System.out.println(s);
//绑定队列到交换器上
admin.declareBinding(newBinding("admin.queue",Binding.DestinationType.QUEUE,"amqp.exchange","admin.qqq",null));
}
AMQP消息发送的操作
/**
*1、点对点
*/
@Test
public void send(){
//rabbitTemplate.send(交换机,路由键,消息体);
//消息体可以直接传入对象将会自动序列化
//rabbitTemplate.convertAndSend(交换机,路由键,消息体);
HashMap<Object,Object>objectObjectHashMap=newHashMap<>();
objectObjectHashMap.put("name","zm");
objectObjectHashMap.put("list",Arrays.asList("1","2","3","4"));
Bookbook=newBook();
book.setId("1");
book.setName("书名1");
book.setPrice("12.3");
//对象被默认序列化
rabbitTemplate.convertAndSend("amqp.exchange","admin.qqq",book);
}
/*
*给exchange.fanout交换机下所有队列发送消息
*/
@Test
public void sendAll(){
Bookbook=newBook();
book.setId("1");
book.setName("书名1");
book.setPrice("12.3");
//对象被默认序列化
rabbitTemplate.convertAndSend("exchange.fanout","zm.news",book);
}
/*
*给exchange.Topic交换机下所有队列根据规则发送消息
*/
@Test
public void sendByTopic(){
Bookbook=newBook();
book.setId("1");
book.setName("书名1");
book.setPrice("12.3");
//对象被默认序列化
rabbitTemplate.convertAndSend("exchange.topic","xxx.news",book);
}