(十七)Java springcloud B2B2C o2o多用户商城 springcloud架构-消息驱动 Spring Cloud Stream...
在使用spring cloud云架构的时候,我们不得不使用Spring cloud Stream,因为消息中间件的使用在项目中无处不在,我们公司后面做了娱乐方面的APP,在使用spring cloud做架构的时候,其中消息的异步通知,业务的异步处理都需要使用消息中间件机制。spring cloud的官方给出的集成建议(使用rabbit mq和kafka),我看了一下源码和配置,只要把rabbit mq集成,kafka只是换了一个pom配置jar包而已,闲话少说,我们就直接进入配置实施:
1. 简介:
Spring cloud Stream 数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
2. 使用工具:
rabbit,具体的下载和安装细节我这里不做太多讲解,网上的实例太多了
3. 创建commonservice-mq-producer消息的发送者项目,在pom里面配置stream-rabbit的依赖
<span style="font-size: 16px;"><!-- 引入MQ消息驱动的微服务包,引入stream只需要进行配置化即可,是对rabbit、kafka很好的封装 -->
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency></span> 复制代码
4. 在yml文件里面配置rabbit mq
<span style="font-size: 16px;">server: port: 5666
spring: application: name: commonservice-mq-producer profiles: active: dev cloud: config: discovery: enabled: true service-id: commonservice-config-server <span style="color: #ff0000;"># rabbitmq和kafka都有相关配置的默认值,如果修改,可以再次进行配置 stream: bindings: mqScoreOutput: destination: honghu_exchange contentType: application/json rabbitmq: host: localhost port: 5672 username: honghu password: honghu</span>
eureka: client: service-url: defaultZone: http://honghu:123456@localhost:8761/eureka instance: prefer-ip-address: true</span> 复制代码
5. 定义接口ProducerService
<span style="font-size: 16px;">package com.honghu.cloud.producer; import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.SubscribableChannel; public interface ProducerService { String SCORE_OUPUT = "mqScoreOutput"; @Output(ProducerService.SCORE_OUPUT) SubscribableChannel sendMessage();
}</span> 复制代码
6. 定义绑定
<span style="font-size: 16px;">package com.honghu.cloud.producer; import org.springframework.cloud.stream.annotation.EnableBinding; @EnableBinding(ProducerService.class)
public class SendServerConfig { }</span> 复制代码
7. 定义发送消息业务ProducerController
<span style="font-size: 16px;">package com.honghu.cloud.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import com.honghu.cloud.common.code.ResponseCode;
import com.honghu.cloud.common.code.ResponseVO;
import com.honghu.cloud.entity.User;
import com.honghu.cloud.producer.ProducerService; import net.sf.json.JSONObject; @RestController
@RequestMapping(value = "producer")
public class ProducerController { @Autowired private ProducerService producerService; /** * 通过get方式发送</span>对象<span style="font-size: 16px;"> * @param name 路径参数 * @return 成功|失败 */ @RequestMapping(value = "/sendObj", method = RequestMethod.GET) public ResponseVO sendObj() { User user = new User(1, "hello User"); <span style="color: #ff0000;">Message<User> msg = MessageBuilder.withPayload(user).build();</span> boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); } /** * 通过get方式发送字符串消息 * @param name 路径参数 * @return 成功|失败 */ @RequestMapping(value = "/send/{name}", method = RequestMethod.GET) public ResponseVO send(@PathVariable(value = "name", required = true) String name) { Message msg = MessageBuilder.withPayload(name.getBytes()).build(); boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); } /** * 通过post方式发送</span>json对象<span style="font-size: 16px;"> * @param name 路径参数 * @return 成功|失败 */ @RequestMapping(value = "/sendJsonObj", method = RequestMethod.POST) public ResponseVO sendJsonObj(@RequestBody JSONObject jsonObj) { Message<JSONObject> msg = MessageBuilder.withPayload(jsonObj).build(); boolean result = producerService.sendMessage().send(msg); if(result){ return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_SUCCESS, false); } return ResponseCode.buildEnumResponseVO(ResponseCode.RESPONSE_CODE_FAILURE, false); }
}
</span> 复制代码
8. 创建commonservice-mq-consumer1消息的消费者项目,在pom里面配置stream-rabbit的依赖
<!-- 引入MQ消息驱动的微服务包,引入stream只需要进行配置化即可,是对rabbit、kafka很好的封装 -->
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency> 复制代码
9. 在yml文件中配置:
server: port: 5111
spring: application: name: commonservice-mq-consumer1 profiles: active: dev cloud: config: discovery: enabled: true service-id: commonservice-config-server <span style="color: #ff0000;">stream: bindings: mqScoreInput: group: honghu_queue destination: honghu_exchange contentType: application/json rabbitmq: host: localhost port: 5672 username: honghu password: honghu</span>
eureka: client: service-url: defaultZone: http://honghu:123456@localhost:8761/eureka instance: prefer-ip-address: true 复制代码
10. 定义接口ConsumerService
package com.honghu.cloud.consumer; import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel; public interface ConsumerService { <span style="color: #ff0000;">String SCORE_INPUT = "mqScoreInput"; @Input(ConsumerService.SCORE_INPUT) SubscribableChannel sendMessage();</span> } 复制代码
11. 定义启动类和消息消费
package com.honghu.cloud; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener; import com.honghu.cloud.consumer.ConsumerService;
import com.honghu.cloud.entity.User; @EnableEurekaClient
@SpringBootApplication
@EnableBinding(ConsumerService.class) //可以绑定多个接口
public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } <span style="color: #ff0000;">@StreamListener(ConsumerService.SCORE_INPUT) public void onMessage(Object obj) { System.out.println("消费者1,接收到的消息:" + obj); }</span> } 复制代码
12. 分别启动commonservice-mq-producer、commonservice-mq-consumer1
13. 通过postman来验证消息的发送和接收
可以看到接收到了消息,下一章我们介绍mq的集群方案。
到此,整个消息中心方案集成完毕。
欢迎大家和我一起学习spring cloud构建微服务云架构,我这边会将近期研发的spring cloud微服务云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发spring cloud框架的朋友,大家来一起探讨spring cloud架构的搭建过程及如何运用于企业项目。
Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求: 一零叁八七七四六贰六 完整项目的源码来源
转载于:https://juejin.im/post/5c2dc0346fb9a049a979d3ce
(十七)Java springcloud B2B2C o2o多用户商城 springcloud架构-消息驱动 Spring Cloud Stream...相关推荐
- Java springcloud B2B2C o2o多用户商城 springcloud架构 (十七)上传文件
2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件. 构建工程 ...
- (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...
通过Spring Cloud构建PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台,之前我们讲了很多关于Spring Cloud的概念文章,从本 ...
- Java springcloud B2B2C o2o多用户商城 springcloud架构
Spring cloud b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.用java实施的电子商务平台太少了,使用spring cloud技术构建的b2b2c电子商务平台更少,大型企 ...
- Java springcloud B2B2C o2o多用户商城 springcloud架 (二): 配置管理
使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring ...
- Java springcloud B2B2C o2o多用户商城 springcloud架构 (二十二)创建含有多module的springboot工程...
这篇文章主要介绍如何在springboot中如何创建含有多个module的工程,栗子中含有两个 module,一个作为libarary. 工程,另外一个是主工程,调用libary .其中libary ...
- (十五)Java springcloud B2B2C o2o多用户商城 springcloud架构-commonservice-sso服务搭建(一)...
2019独角兽企业重金招聘Python工程师标准>>> 前面几篇我们已经介绍了Spring Cloud和oauth2的知识点,今天我们要利用Spring Cloud和oauth2进行 ...
- (十)Java B2B2C o2o多用户商城 springcloud架构- SSO单点登录之OAuth2.0登录认证(1)
2019独角兽企业重金招聘Python工程师标准>>> 之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAu ...
- (四)Java B2B2C o2o多用户商城 springcloud架构-断路器(Hystrix)
2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestT ...
- SpringCloud学习笔记 - 消息驱动 - Spring Cloud Stream
1. stream为什么被引入 常见MQ(消息中间件): ActiveMQ RabbitMQ RocketMQ Kafka 有没有一种新的技术诞生,让我们不再关注具体MQ的细节,我们只需要用一种适配绑 ...
最新文章
- 教你在Nodejs中如何获取当前函数被调用的行数及文件名
- 可以接受失败,但不选择放弃
- Java vs Big data 哪种编程语言更好?
- dynamic_caast操作符
- delphi xe firedac mysql_xe6+firedac 连接sybase
- Android 开发 技术大纲 某学课堂
- IE11浏览器一个窗口打开多个页面设置方法
- [转载] python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...
- 02.XMemcached的使用
- [Web开发] IE文档模式终极指南
- 【Python】@ 操作符
- Alpine linux 没有apt-get安装软件方法 安装vim
- pycharm怎样运行python_python – 如何使用PyCharm运行doctests?
- bt磁力种子与php文件,使用Python实现BT种子和磁力链接的相互转换
- springboot进行微信公众号相关开发:(二)获取微信公众号access_token用以微信公众号各功能接口的调用
- Vue中使用微信JSDK实现图片上传
- 抖音seo矩阵系统,抖音矩阵系统源码怎么搭建?
- css内行样式、外部样式、内部样式
- 根据电路建立微分方程
- MySQL执行-SQL执行顺序
热门文章
- C++ STL标准模板库
- LeetCode刷题(9)
- Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)
- linux 用户权限 数字,几个linux命令之用户权限相关命令
- html5结构 客户端缓存,Javascript--离线应用与客户端储存
- 开启Nginx压缩,解决前端访问慢问题
- linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...
- sql用户名数据迁移到mysql_如何将SQL Server数据迁移到MySQL
- 5.10 Ext JS Grid中 WidgetColumn(组件列)的使用
- 在Eclipse中使用Maven创建多模块的层级项目