作者:Cott

www.cnblogs.com/cott/p/12402423.html

前文总结了Dubbo与SpringBoot的整合,本文基于这套框架,引入RabbitMQ消息队列。

1.在linux环境使用docker安装RabbitMQ

//拉取镜像
docker pull rabbitmq:management
//启动镜像
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

安装成功后登陆控制台

2.生产者

pom.xml中引入RabbitMQ依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>1.3.5.RELEASE</version>
</dependency>

配置RabbitMQ服务端连接,和交换机名称

application.yml

spring:rabbitmq:port: 5672username: adminpassword: adminhost: 192.168.200.128virtual-host: /order:fanout:exchange: order.fanout.exchange

生产者向MQ发送消息

Producer.java

package com.cott.gmail.bootuserserviceprovider.mq;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.util.Date;
import java.util.UUID;@Component
public class Producer {@Autowiredprivate RabbitTemplate rabbitTemplate;@Value("${order.fanout.exchange}")private String exchangeName;public void sendMsg() {String orderId = UUID.randomUUID().toString();String message = "你的订单信息是:" + orderId + ",日期是:" + new Date();rabbitTemplate.convertAndSend(exchangeName, message);}
}

在用户接口的实现类中,调用生产者的方法

UserServiceImpl.java

package com.cott.gmail.bootuserserviceprovider.service.impl;import com.alibaba.dubbo.config.annotation.Service;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.bootuserserviceprovider.mq.Producer;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Arrays;
import java.util.List;@Service
@Component
public class UserServiceImpl implements UserService {@AutowiredProducer producer;@Overridepublic List<UserAddress> getAddress(String uesrId) {producer.sendMsg();UserAddress userAddress1 = new UserAddress();userAddress1.setId(1);userAddress1.setUserAddress("1");userAddress1.setUserId("1");UserAddress userAddress2 = new UserAddress();userAddress2.setId(2);userAddress2.setUserAddress("2");userAddress2.setUserId("2");return Arrays.asList(userAddress1, userAddress2);}
}

3.消费者

pom.xml中引入RabbitMQ依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>1.3.5.RELEASE</version>
</dependency>

配置RabbitMQ服务端信息,和交换机以及队列名称

application.yml

spring:rabbitmq:port: 5672username: adminpassword: adminhost: 192.168.200.128virtual-host: /order:fanout:exchange: order.fanout.exchangequeue: order.fanout.queue

@RabbitListener注解,绑定队列,交换机,以及选择交换模式FANOUT

  • @RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用

  • @RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型

Consumer.java(消费者)

package com.cott.gmail.bootorderserviceconsumer.service.impl;import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;@Component
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${order.fanout.queue}", autoDelete = "true"), exchange =
@Exchange(value = "${order.fanout.exchange}", type = ExchangeTypes.FANOUT)))
public class Consumer {@RabbitHandlerpublic void processMessage(String msg) {System.out.format("Receiving Message: -----[%s]----- \n.", msg);}
}

消费者中有调用生产者getAddress()的方法,生产者向MQ中发送一条消息,同时消费者监听MQ,消费消息。

OrderServiceImpl.java

package com.cott.gmail.bootorderserviceconsumer.service.impl;import com.alibaba.dubbo.config.annotation.Reference;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.service.OrderService;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class OrderServiceImpl implements OrderService {@ReferenceUserService userService;@Overridepublic List<UserAddress> initOrder(String id) {System.out.println("id= " + id);List<UserAddress> list = userService.getAddress("1");for (UserAddress user : list) {System.out.println(user.getUserAddress());}return list;}
}

4.验证

先后启动生产者和消费者,在浏览器发起请求

消费者控制台输出

同时在RabbitMQ控制台查看监控日志

END

Java面试题专栏

【51期】一道阿里面试题:说说你知道的关于BeanFactory和FactoryBean的区别

【52期】记一道简单的Java面试题,但答错率很高!

【53期】面试官:谈一下数据库分库分表之后,你是如何解决事务问题?

【54期】Java序列化三连问,是什么?为什么需要?如何实现?

【55期】面试中经常被问到Java引用类型原理,带你深入剖析

【56期】你说你熟悉并发编程,那么你说说Java锁有哪些种类,以及区别

【57期】面试官问,MySQL建索引需要遵循哪些原则呢?

【58期】盘点那些面试中最常问的MySQL问题,第一弹!

【59期】MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)

【60期】事务隔离级别中的可重复读能防幻读吗?(MySQL面试第三弹)

我知道你 “在看”

SpringBoot 整合 RabbitMQ 实践相关推荐

  1. 九、springboot整合rabbitMQ

    springboot整合rabbitMQ 简介 rabbitMQ是部署最广泛的开源消息代理. rabbitMQ轻量级,易于在内部和云中部署. 它支持多种消息传递协议. RabbitMQ可以部署在分布式 ...

  2. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ

    什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...

  3. SpringBoot整合 ActiveMQ、SpringBoot整合RabbitMQ、SpringBoot整合Kafka

    1.概念:SpringBoot 整合消息服务2.具体内容对于异步消息组件在实际的应用之中会有两类:· JMS:代表作就是 ActiveMQ,但是其性能不高,因为其是用 java 程序实现的:· AMQ ...

  4. RabbitMq(九) SpringBoot整合RabbitMQ消费者示例代码

    概述 在上一篇我们介绍了SpringBoot整合RabbitMQ生产者代码,本章我们介绍SpringBoot整合RabbitMQ,实现消费者工程的代码实现.与生产者集成相比,集成消费者不需要进行添加配 ...

  5. RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现

    在本章中我们将创建RabbitMQ的生产者工程,并实现生产者端代码实现. springboot整合RabbitMQ生产者工程步骤如下: 创建maven工程 引入springboot及RabbitMQ依 ...

  6. Springboot整合一之Springboot整合RabbitMQ

    前言 目前,springboot已然成为了最热的java开发整合框架,主要是因其简单的配置,并且本身提供了很多与第三方框架的整合,甚至可以让我们在短短的几分钟里就可以搭建一个完整的项目架构.所以,博主 ...

  7. Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  8. Spring Boot---(10)SpringBoot整合RabbitMQ

    请参考:Spring Boot---(24)springboot整合RabbitMQ 由于docker安装非常方便,这里就用docker来安装和启动了.没接触过docker的可以参考这里:零基础学习D ...

  9. RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ

    RabbitMQ [黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战] 文章目录 RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ 6.1 Sprin ...

最新文章

  1. 分布式系统的复杂度度量思考
  2. 【Codeforces1327A】: Sum of Odd Intergers C/C++题解
  3. bash alias, VIM配置,和使用的插件 RAILS开发相关
  4. 创建表名作为参数的mysq存储过程【procedure】
  5. 实战SSM_O2O商铺_11【商铺注册】Controller层的实现
  6. python玩转android_Android上执行python脚本-QPython
  7. Vue项目打包成桌面程序exe除了使用electron-vue你还可以这样
  8. BZOJ 1800 [Ahoi2009]fly 飞行棋
  9. 性能测试——美团国内机票网站(Badboy、JMeter)
  10. 【ADO.NET--MVC】初学MVC(MVC入门)(1)
  11. .NET 某电商交易平台Web站 CPU爆高分析
  12. VC6.0编译错误解决方法集锦
  13. smartPrinter 安装时1722错误
  14. 一行代码教你屏蔽你的博客广告
  15. Mac Mysql5.7.6+免安装版教程
  16. M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒
  17. 单片机音频节奏灯_如何用单片机做出用音乐节奏来控制LED灯?
  18. 现在比较流行的编程语言_比较流行的编程语言
  19. JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】
  20. ipguard定制加密超级密码和登录提示

热门文章

  1. 苹果多款产品加征关税至15% 目前售价暂无影响
  2. 这个阿里篮球打得最好的男人 拟收购NBA篮网余下51%股权
  3. 三天花三万!跟董事长女儿相亲却被骗财?世纪佳缘致歉杭州小吴并承诺赔偿...
  4. 三星Galaxy 首款运动腕表全新渲染图曝光
  5. linux shell编程if语句内判断参数详解【ZT】
  6. css除法,CSS_关系数据库 除法,假设有两个关系,R(a,b,c)和T(b,c - phpStudy
  7. rest php,restAPI
  8. 我的世界药水合成表图Java_我的世界药水合成表图高清配方-我的世界药水合成表图一览...
  9. php变量有三种不同的作用域,PHP中变量类型与转换,变量的检测以及变量的作用域学习--2018年4月13日12时03分...
  10. 梯度下降python编程实现_【机器学习】线性回归——单变量梯度下降的实现(Python版)...