1.pom引入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-amqp</artifactId>
  4. </dependency>

2.配置properties或yaml文件

  1. spring.rabbitmq.host=localhost
  2. spring.rabbitmq.username=guest
  3. spring.rabbitmq.password=guest

3.用RabbitTemplate测试

3.1测试单播模式

  1. @SpringBootTest
  2. class CacheApplicationTests {
  3. @Autowired
  4. RabbitTemplate rabbitTemplate;
  5. /**
  6. * 测试单播发消息(点对点模式)
  7. */
  8. @Test
  9. void test(){
  10. //这种发送写法要自己构造一个Message:定义消息体内容和消息头
  11. //rabbitTemplate.send(exchane,routingKey,message);
  12. //object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq;
  13. Map<String,String> map=new HashMap<>();
  14. map.put("msg","这是一个消息");
  15. rabbitTemplate.convertAndSend("exchange.direct","jf3q.news",map);
  16. }
  17. /**
  18. * 接收消息
  19. */
  20. @Test
  21. void testreceive(){
  22. Object o = rabbitTemplate.receiveAndConvert("jf3q.news");
  23. System.out.println(o);
  24. }

效果:
image.png

3.2修改成json序列化方式

只需要新建一个配置类就可以了。

  1. @Configuration
  2. public class MyAMQPConfig {
  3. @Bean
  4. public MessageConverter messageConverter(){
  5. return new Jackson2JsonMessageConverter();
  6. }
  7. }

效果如下:
image.png

3.3测试广播模式

  1. @Data
  2. @AllArgsConstructor
  3. @NoArgsConstructor
  4. public class Book {
  5. public String name;
  6. public String author;
  7. }
  1. /**
  2. * 接收消息
  3. */
  4. @Test
  5. void testreceive(){
  6. Object o = rabbitTemplate.receiveAndConvert("jf3q.emps");
  7. System.out.println(o);
  8. }
  9. /**
  10. * 测试广播
  11. */
  12. @Test
  13. void testfanout(){
  14. rabbitTemplate.convertAndSend("exchange.fanout","",new Book("三国演义","罗贯中"));
  15. }

4.用@RabbitListener监听队列

  1. 需要在主程序中开启@EnableRabbit这个注解 ```java @EnableRabbit public class RabbitApplication {

    public static void main(String[] args) {

    1. SpringApplication.run(RabbitApplication.class, args);

    }

}

  1. 2. 然后就是在你要监听的方法上加 @RabbitListener(queues = "你要监听的队列")
  2. 以下是两种监听后接收信息的方法。
  3. ```java
  4. @RabbitListener(queues = "jf3q.news")
  5. public void receive(Book book){
  6. System.out.println("书的信息:"+book);
  7. }
  8. @RabbitListener(queues = "jf3q")
  9. public void receive2(Message message){
  10. System.out.println(message.getBody());//获取消息体内容(字节内容对象)
  11. System.out.println(message.getMessageProperties());//获取消息头信息
  12. }

效果如下:
image.png

5.AmqpAdmin

RabbitMQ系统管理功能组件; 创建和删除queue exchange binding

  1. @Autowired
  2. AmqpAdmin amqpAdmin;
  3. @Test
  4. void testamqp(){
  5. //创建一个Direct的交换器
  6. //amqpAdmin.declareExchange(new DirectExchange("amqp.exchange"));
  7. //创建一个永久的队列
  8. /*amqpAdmin.declareQueue(new Queue("amqp.queue",true));*/
  9. //创建一个绑定规则
  10. amqpAdmin.declareBinding(new Binding("amqp.queue", Binding.DestinationType.QUEUE,"amqp.exchange","amqp.hh",null));
  11. }