RabbitMQ - 简单使用
一、理解
1.步骤
- 建立虚拟主机virtual hosts
- 建立交换器Exchanges(交换器主要是三种类型direct,fanout, topic)
- 建立队列Queues
- 队列与交换器绑定,在此过程中指定绑定的路由键 --> 路由键可以精确匹配也可以使用 # 进行模糊匹配(匹配零个或多个)
二、简单使用测试
/** * mq控制类 */ @Autowired private AmqpAdmin amqpAdmin; /** * mq调用类 */ @Autowired private RabbitTemplate rabbitTemplate; //创建交换器 @Test public void contextLoads() { amqpAdmin.declareExchange(new DirectExchange("myone"));//持久化:DirectExchange(String name, boolean durable, boolean autoDelete)- autoDelete 是否持久化 amqpAdmin.declareExchange(new FanoutExchange("mytwo")); } //创建队列 @Test public void cont213213extLoads() { amqpAdmin.declareQueue(new Queue("haone"));//持久化:Queue(String name, boolean durable) - autoDelete 是否持久化 amqpAdmin.declareQueue(new Queue("hatwo")); } //绑定并指定路由键 @Test public void cont2132sadasd13extLoads() { amqpAdmin.declareBinding(new Binding("haone", Binding.DestinationType.QUEUE,"myone","keyone",null)); amqpAdmin.declareBinding(new Binding("hatwo", Binding.DestinationType.QUEUE,"mytwo","keytwo",null)); amqpAdmin.declareBinding(new Binding("haone", Binding.DestinationType.QUEUE,"mytwo","keythree",null)); } //发送点对点消息 @Test public void cont2132sasfgdsgdasd13extLoads() { Map<String,String> map = new HashMap<String,String>(); map.put("方哈儿","大笨蛋"); rabbitTemplate.convertAndSend("myone","keyone",map); } //发送订阅消息 @Test public void cont2132sadasdfghfghgfg13extLoads() {
//要判断是否为null,因为消费后,消息就消失了, Object haone = rabbitTemplate.receiveAndConvert("haone"); System.out.println(haone.getClass()); System.out.println(haone); }
三、是否序列话成json,需要的话要添加一个配置类
@Configuration public class CustomerRabbitMQConfig { @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } }
四、配置文件
spring: rabbitmq: host: localhost virtual-host: rlzy username: lalademaxiya password: 123456