赞
踩
- 引入amqp依赖场景;RabbitAutoCon>figuration就会自动生
- 给容器中自动配置了RabbitTemplate、AmqpAdmin、CachingConnectionFactory、RabbitMessagingTemplate
- @EnableRabbit:(在创建交换机,队列时可以不需要,发送消息可以不需要这个注解,监听消息必须使用这个注解)
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
spring:
rabbitmq:
host: 192.168.234.133
port: 5672
virtual-host: /
@EnableRabbit
里面自动注入的组件
RabbitTeamplate:用于发送消息
AmqpAdmin:需要一个连接对象
CachingConnectionFactory:连接创建工厂
RabbitMessagingTemplate:操作消息的类
首先就是创建AmqpAdmin,并且这个时候需要配置一下连接工厂的配置信息,主要就是host、port和virtual-host虚拟主机
参数
- exchange:name、durable(持久化)、autodelete(自动删除)
- queue:name、durable、excusive(排他,其它连接是否能够传输信息进来)、autodelete
@Test void exchange() { //注意,创建交换机就指定了交换机的类型为direct DirectExchange directExchange = new DirectExchange("hello.java.exchange",true,false); amqpAdmin.declareExchange(directExchange); } @Test void queue() { Queue queue = new Queue("hello.java.queue",true,false,true); amqpAdmin.declareQueue(queue); } @Test void binding() { Binding binding = new Binding("hello.java.queue", Binding.DestinationType.QUEUE,"hello.java.exchange","hello",new HashMap<>()); amqpAdmin.declareBinding(binding); }
思路
①第一个就是要知道在传送消息的时候是需要依靠模板rabbitTemplate,它里面有一个messageConverter,这个转换器主要就是能够把消息变成对应的形式。通常用的是simple,这个转换器就是序列化转换成byte数组来传输,但是我们可以增加自己配置一个Json的Config转换器。发送消息用的是json状态
②接着就是通过模板来发送
@Configuration
public class MyRabbitConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
发送消息用例:
@Autowired
RabbitTemplate rabbitTemplate;
@Test
public void sendMessage(){
MemberResVo memberResVo = new MemberResVo();
memberResVo.setCity("sss");
memberResVo.setId(123L);
/**
* 参数如下:交换机名称、消息的路由键、消息内容、(消息的唯一id:new CorrelationData(UUID.randomUUID().toString))
*/
rabbitTemplate.convertAndSend("hello.java.exchange","hello",memberResVo);
}
思路
①开启注解EnableRabbit才能够使用@RabbitListener来监听,并且指定监听队列可以是多个。
②然后就发送消息进行测试
③RabbitHandler主要只能对方法起作用,@RabbitListener类和方法都可以,但是handler有利于方法的重载:用于接收不同类型的消息
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。