1、引入spring-boot-starter-amqp
2、application.yml配置
spring:
rabbitmq:
host: 192.168.1.235
username: test #默认是guest
password: 123456 #默认是guest
virtual-host: /tzb #默认是/
port: 5672 #默认是5672
3、自动配置基本原理
springboot引入spring-boot-starter-amqp后会自动给容器中配置:
连接工厂ConnectionFactory
RabbitTemplate(给RabbitMQ发送和接收消息,类似jdbcTemplate和redisTemplate)。
AmqpAdmin:RabbitMQ系统管理组件(创建交换器和队列等)
RabbitProperties封装了RabbitMQ的配置
4、代码
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private AmqpAdmin amqpAdmin;
//简单发送消息
@Test
public void contextLoads() {
Map<String,String> message = new HashMap<>();
message.put("message","HelloWorld!");
message.put("data","第一条消息");
rabbitTemplate.convertAndSend("test_exchange_direct","dog",message);
}
//简单接收消息
@Test
public void receive(){
HashMap<String,String> map = (HashMap<String, String>) rabbitTemplate.receiveAndConvert("test_queue_direct_1");
System.out.println(map);
}
监听队列:@RabbitListener 和@EnableRabbit开启基于注解的rabbitmq
//监听某个队列,当队列有消息时,调用该方法 会根据类型自动封装
@RabbitListener(queues = "test_queue_direct_1")
public void recevie(User user){
System.out.println(user);
}
消息的序列化:默认是用jdk的序列化,可以自定义json序列化
@Configuration
public class MyRabbitMQConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
AmqpAdmin的使用:
@Test
public void testAdmin(){
//创建交换机
amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));
//创建队列
amqpAdmin.declareQueue(new Queue("test_queue"));
//创建绑定规则
amqpAdmin.declareBinding(new Binding("test_queue",Binding.DestinationType.QUEUE,"fanout_exchange","test.#",null));
}