Spring Boot -- 整合RabbitMQ消息队列
2019-05-13 23:42
555 查看
1.引入RabbitMQ的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2.在application.yml配置RabbitMQ:
spring: rabbitmq: addresses: localhost username: guest password: guest port: 5672
3.我们在测试类里开始使用springboot提供给我们的模板RabbitTemplate
@Autowired RabbitTemplate rabbitTemplate;
4.使用rabbitTemplate:
1) rabbitTemplate.send(exchange,routekey,message);
这个方法需要我们自己定义message,定义消息体内容和消息头
2) rabbitTemplate.convertAndSend(exchange,routekey,object);
这个方法object默认被当成消息体,我们只需要传入发送的对象,便会自动序列化给rabbitMQ
exchange是交换机的名称,下面指定了一个点对点交换机exchange.direct作为示例,当然广播模式也一样,可以不用指定路由键广播即可
routekey是路由键名称,指明发送给哪个队列,示例发送给id0304.news队列
Map<String , Object> maps = new HashMap<String,Object>(); maps.put("msg","这是第一个消息"); maps.put("data", Arrays.asList("helloworld",123,true)); rabbitTemplate.convertAndSend("exchange.direct","id0304.news",maps);//运行测试类,再查看rabbitMQ队列里的数据
结果收到一串序列,说明以及成功加入队列.当然我们可以自己改成json类型,需要我们自己配置RabbitMQ,这里我们创建一个配置类MyMQConfig.java:
package com.id0304.amqp.config; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyMQConfig { @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } }
可以看到这回是json数据类型存放再队列里了,当然取出数据时,也是正常的.
3) rabbitTemplate.receiveAndConvert(queueName);
这个方法可以用于接收队列,需要传入队列名称,然后返回一个Object对象.
Object o = rabbitTemplate.receiveAndConvert("id0304.news"); System.out.println(o.getClass()); System.out.println(o);
打印结果:
可见已经得到一个map集合,模板会自动识别类型,取出了这个序列之后,会发现rabbitMQ里这段数据已经为空.
5.使用springboot注解开发RabbitMQ
1) 开启基于注解的RabbitMQ模式:
package com.id0304.amqp; import org.springframework.amqp.rabbit.annotation.EnableRabbit; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableRabbit @SpringBootApplication public class Springboot02AmqpApplication { public static void main(String[] args) { SpringApplication.run(Springboot02AmqpApplication.class, args); } }
2) 配置监听,在要使用MQ的方法上加@RabbitListener(queues = “id0304.news”)注解即可.我们先在id0304.news这个队列存入一个Book对象.
package com.id0304.amqp.service; import com.id0304.amqp.pojo.Book; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Service; @Service public class BookService { @RabbitListener(queues = "id0304.news") public void recieve(Book book){ System.out.println(book); } }
运行主方法,这样这个方法就取出了刚刚存在队列id0304.news中的book对象并执行方法体.
当然,我们也可以获取消息体和消息头,传入的参数改为Message就可以获取整个消息
@RabbitListener(queues = "atguigu.news") public void recieve2(Message message){ System.out.println("消息头:"+message.getMessageProperties()); System.out.println("消息体:"+message.getBody()); }
相关文章推荐
- 集群与负载均衡系列(5)——消息队列之spring-boot整合Rabbitmq
- SpringBoot的RabbitMQ消息队列: 四、第三模式"Publish/Subscribe"
- 消息队列 RabbitMQ 与 Spring 整合使用
- SpringBoot 整合 RabbitMQ(包含三种消息确认机制以及消费端限流)
- SpringBoot的RabbitMQ消息队列: 三、第二模式"Work queues"
- SpringBoot2.X 整合RedisTemplate 简单实现消息队列
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
- spring整合消息队列rabbitmq
- Spring Boot 构建应用——整合消息中间件 RabbitMQ
- spring整合消息队列rabbitmq
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
- springboot整合rabbitmq,支持消息确认机制
- SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
- SpringBoot的RabbitMQ消息队列: 六、第五模式"Topics"
- Spring整合RabbitMQ进行消息队列开发
- SpringBoot的RabbitMQ消息队列: 六、第五模式"Topics"
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
- SpringBoot的RabbitMQ消息队列: 四、第三模式"Publish/Subscribe"
- SpringBoot整合Rabbitmq设置消息请求头