SpringBoot整合RabbitMQ

SpringBoot整合RabbitMQ

Scroll Down

写在前面的,希望读者再看之前可以先看看这两篇博客,理解一下RabbitMQ是干什么的。

RabbitMQ的使用
RabbitMQ 简介以及使用场景

SpringBoot整合RabbitMQ

1、先看看目录结构:
1
2在pom文件里面添加对应的依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

3、RabbitMQ的配置原理

  • 1、RabbitAutoConfiguration
  • 2、有自动配置了连接工厂ConnectionFactory;
  • 3、RabbitProperties 封装了 RabbitMQ的配置
  • 4、 RabbitTemplate :给RabbitMQ发送和接受消息;
  • 5、 AmqpAdmin : RabbitMQ系统管理功能组件;
  • 6、AmqpAdmin:创建和删除 Queue,Exchange,Binding
  • 7、@EnableRabbit + @RabbitListener 监听消息队列的内容

4、创建对应的properties文件

//对应的主机ip
spring.rabbitmq.host=192.168.1.107
//账号
spring.rabbitmq.username=guest
//密码
spring.rabbitmq.password=guest
#spring.rabbitmq.virtual-host=

5、测试:

1.创建绑定以及消息队列

@Test
	public void createExchange(){

//		amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
//		System.out.println("创建完成");

//		amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
		//创建绑定规则

//		amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null));

		//amqpAdmin.de
	}

exchange创建结果
6
消息队列创建结果
7
绑定结果
8

  1. 单播(点对点)
@Test
	public void contextLoads() {
		//Message需要自己构造一个;定义消息体内容和消息头
		//rabbitTemplate.send(exchage,routeKey,message);

		//object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq;
		//rabbitTemplate.convertAndSend(exchage,routeKey,object);
		
		Map<String,Object> map = new HashMap<>();
		map.put("msg","这是第一个消息");
		map.put("data", Arrays.asList("helloworld",123,true));
		
		//对象被默认序列化以后发送出去
		rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",new Book("西游记","吴承恩"));

	}
//接受数据,如何将数据自动的转为json发送出去
	@Test
	public void receive(){
		Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
		System.out.println(o.getClass());
		System.out.println(o);
	}
  1. 广播(全覆盖)
@Test
	public void sendMsg(){
		rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
	}

2
对应的内容:
3
二次发送:
4

注意:结果里面的Payload里面的内容是转化后的,转化过程:

@Configuration
public class MyAMQPConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

//接受数据,如何将数据自动的转为json发送出去
	@Test
	public void receive(){
		Object o = rabbitTemplate.receiveAndConvert("atguigu.emps");
		System.out.println(o.getClass());
		System.out.println(o);
	}

还可以通过@RabbitListener注解进行监听:

@Service
public class BookService {

    @RabbitListener(queues = "atguigu.news")
    public void receive(Book book){
        System.out.println("收到消息:"+book);
    }

    @RabbitListener(queues = "atguigu")
    public void receive02(Message message){
        System.out.println(message.getBody());
        System.out.println(message.getMessageProperties());
    }
}

监听结果:
10

谢谢,顺便推荐一下我的个人博客:天涯志