springboot中rabbitmq集成——单项目
2017-04-08 18:53
761 查看
这两天看了下activemq和rabbitmq,现在跟大家分享下rabbitmq在springboot中的集成及使用。
依赖
具体代码:
继承CommandLineRunner是消息队列能够在项目启动的时候直接执行。
接收(消费)消息的代码,(现在先以一个项目来操作):
@RabbitListener(queues=”my-rabbitmq”)是用来监听消息队列的,如果队列中有消息将直接在这里被消费掉。
启动项目,控制台log如下:
我收到的消息是:这是我rabbitmq的测试消息成功消费掉了。
定义两个消息的接收器,代码稍作改动:
这里一次发送十条消息。
消息接收器代码:
上面的log可以看到,两个消息接收器都有收到消息,而且是轮询消费消息的,具体是不是一样的大家可以多试几次。
传递对象:
这里分成两种讨论,1、引用的java中的对象,以Map为例;2、自己定义的实体类对象。
1、传递Map
修改代码:
启动项目,看到log:
我接收到消息是:{address=上海漕河泾开发区, name=庞坤, age=28}
2、自己定义的实体类对象。
注意,这里一定要对User序列化
生成消息
消费消息
控制台log:
注意下user对象com.rhett.rabbitmq.User@3289bb89,直接指向发送的消息的实体类,两个项目之间消费消息的时候这里会有问题。
具体解决方案我会在下篇文章多项目之间说明。
参考书籍:汪云飞老师的 spring boot实战
依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
具体代码:
@SpringBootApplication public class RabbitmqApplication implements CommandLineRunner{ @Autowired RabbitTemplate rabbitTemplate;//使用springboot配置好的队列RabbitTemplate public static void main(String[] args) { SpringApplication.run(RabbitmqApplication.class, args); } /** * 定义目的地队列,命名为my-rabbitmq * 这里实际上是要往rabbitmq里注册队列名称 * */ @Bean public Queue myQueue(){ return new Queue("my-rabbitmq"); } public void run(String... args) throws Exception { //ͨ使用RabbitTemplate的convertAndSend发送给队列my-rabbitmq消息 rabbitTemplate.convertAndSend("my-rabbitmq", "这是我rabbitmq的测试消息"); } }
继承CommandLineRunner是消息队列能够在项目启动的时候直接执行。
接收(消费)消息的代码,(现在先以一个项目来操作):
@Component public class Receiver { private static final Logger log = LoggerFactory.getLogger(Receiver.class); @RabbitListener(queues="my-rabbitmq") public void receive(String message){ System.out.println("我收到的消息是:"+message); } }
@RabbitListener(queues=”my-rabbitmq”)是用来监听消息队列的,如果队列中有消息将直接在这里被消费掉。
启动项目,控制台log如下:
我收到的消息是:这是我rabbitmq的测试消息成功消费掉了。
定义两个消息的接收器,代码稍作改动:
public void run(String... args) throws Exception { for (int i = 0; i < 10; i++) { rabbitTemplate.convertAndSend("my-rabbitmq", "这里的值是"+i); } }
这里一次发送十条消息。
消息接收器代码:
@RabbitListener(queues="my-rabbitmq") public void receive1(String message){ log.info("我是第一个消费监听器,去消费了:"+message); } @RabbitListener(queues="my-rabbitmq") public void receive2(String message){ log.info("我是第二个消费监听器,去消费了:"+message); }
我是第一个消费监听器,去消费了:这里的值是0 我是第二个消费监听器,去消费了:这里的值是1 我是第一个消费监听器,去消费了:这里的值是2 我是第二个消费监听器,去消费了:这里的值是3 我是第一个消费监听器,去消费了:这里的值是4 我是第二个消费监听器,去消费了:这里的值是5 我是第一个消费监听器,去消费了:这里的值是6 我是第二个消费监听器,去消费了:这里的值是7 我是第一个消费监听器,去消费了:这里的值是8 我是第二个消费监听器,去消费了:这里的值是9
上面的log可以看到,两个消息接收器都有收到消息,而且是轮询消费消息的,具体是不是一样的大家可以多试几次。
传递对象:
这里分成两种讨论,1、引用的java中的对象,以Map为例;2、自己定义的实体类对象。
1、传递Map
修改代码:
public void run(String... args) throws Exception { HashMap<String, Object> hm=new HashMap<String, Object>(); hm.put("name", "庞坤"); hm.put("age", 28); hm.put("address", "上海漕河泾开发区"); rabbitTemplate.convertAndSend("my-rabbitmq", hm); }
@RabbitListener(queues="my-rabbitmq") public void receive(HashMap<String, Object> hm){ System.out.println("我接收到消息是:"+hm); }
启动项目,看到log:
我接收到消息是:{address=上海漕河泾开发区, name=庞坤, age=28}
2、自己定义的实体类对象。
注意,这里一定要对User序列化
@Component public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String userName=""; private Integer age=0; private String address=""; /** *省略getter和setter */ }
生成消息
public void run(String... args) throws Exception { User user=new User(); user.setUserName("庞坤"); user.setAge(28); user.setAddress("上海市徐汇区漕河泾开发区"); rabbitTemplate.convertAndSend("my-rabbitmq", user); }
消费消息
@RabbitListener(queues="my-rabbitmq") public void receive(User user) { System.out.println("我收到的消息是:"+user); System.out.println("Address:"+user.getAddress()); System.out.println("UserName:"+user.getUserName()); System.out.println("Age:"+user.getAge()); }
控制台log:
我收到的消息是:com.rhett.rabbitmq.User@3289bb89 Address:上海市徐汇区漕河泾开发区 UserName:庞坤 Age:28
注意下user对象com.rhett.rabbitmq.User@3289bb89,直接指向发送的消息的实体类,两个项目之间消费消息的时候这里会有问题。
具体解决方案我会在下篇文章多项目之间说明。
参考书籍:汪云飞老师的 spring boot实战
相关文章推荐
- springboot中rabbitmq集成——单项目
- springboot中rabbitmq集成——多项目
- SpringBoot+Maven项目实战(2):集成SpringBoot
- rabbitMQ与spring集成在项目中使用
- 第5篇 RabbitMQ集成SpringBoot实现Direct模式
- 搭建spring boot集成mybatis项目入门
- Spring Boot 集成 RabbitMq 实战操作(二)
- SpringBoot+Maven项目实战(4):集成Mybatis
- 关于spring boot项目集成memcached(ocs)、redis(kvStore)、ons、mns、oss
- Springboot集成RabbitMq
- 随着spring boot 1.5版本的发布,在spring项目中与kafka集成更为简便。
- 集成jcaptcha到spring-boot+maven项目中时出现java.lang.NoSuchMethodError: com.jhlabs.image.WaterFilter的问题的解决方法
- 从零学spring boot--集成mybatis--项目--使用注解方式
- spring-boot 集成 rabbitmq
- 集成springboot+thymeleaf+redis+加密框架+异常邮件提醒等技术的开源项目
- 85. Spring Boot集成RabbitMQ【从零开始学Spring Boot】
- Spring Boot (十三)集成RabbitMQ
- Drools与Spring Boot集成的HelloWorld项目
- spring-boot 集成 rabbitmq
- Spring BOOT 集成 RabbitMq 实战操作(一)