在使用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...相关推荐

  1. Java springcloud B2B2C o2o多用户商城 springcloud架构 (十七)上传文件

    2019独角兽企业重金招聘Python工程师标准>>> 这篇文章主要介绍,如何在springboot工程作为服务器,去接收通过http 上传的multi-file的文件. 构建工程 ...

  2. (十四)Java springcloud B2B2C o2o多用户商城 springcloud架构- Spring Cloud构建分布式电子商务平台...

    通过Spring Cloud构建PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台,之前我们讲了很多关于Spring Cloud的概念文章,从本 ...

  3. Java springcloud B2B2C o2o多用户商城 springcloud架构

    Spring cloud b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.用java实施的电子商务平台太少了,使用spring cloud技术构建的b2b2c电子商务平台更少,大型企 ...

  4. Java springcloud B2B2C o2o多用户商城 springcloud架 (二): 配置管理

    使用Config Server,您可以在所有环境中管理应用程序的外部属性.客户端和服务器上的概念映射与Spring Environment和PropertySource抽象相同,因此它们与Spring ...

  5. Java springcloud B2B2C o2o多用户商城 springcloud架构 (二十二)创建含有多module的springboot工程...

    这篇文章主要介绍如何在springboot中如何创建含有多个module的工程,栗子中含有两个 module,一个作为libarary. 工程,另外一个是主工程,调用libary .其中libary ...

  6. (十五)Java springcloud B2B2C o2o多用户商城 springcloud架构-commonservice-sso服务搭建(一)...

    2019独角兽企业重金招聘Python工程师标准>>> 前面几篇我们已经介绍了Spring Cloud和oauth2的知识点,今天我们要利用Spring Cloud和oauth2进行 ...

  7. (十)Java B2B2C o2o多用户商城 springcloud架构- SSO单点登录之OAuth2.0登录认证(1)

    2019独角兽企业重金招聘Python工程师标准>>> 之前写了很多关于spring cloud的文章,今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAu ...

  8. (四)Java B2B2C o2o多用户商城 springcloud架构-断路器(Hystrix)

    2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestT ...

  9. SpringCloud学习笔记 - 消息驱动 - Spring Cloud Stream

    1. stream为什么被引入 常见MQ(消息中间件): ActiveMQ RabbitMQ RocketMQ Kafka 有没有一种新的技术诞生,让我们不再关注具体MQ的细节,我们只需要用一种适配绑 ...

最新文章

  1. 教你在Nodejs中如何获取当前函数被调用的行数及文件名
  2. 可以接受失败,但不选择放弃
  3. Java vs Big data 哪种编程语言更好?
  4. dynamic_caast操作符
  5. delphi xe firedac mysql_xe6+firedac 连接sybase
  6. Android 开发 技术大纲 某学课堂
  7. IE11浏览器一个窗口打开多个页面设置方法
  8. [转载] python 判断字符串是否包含另一个字符串_强烈推荐:Python字符串(string)方法整理(一)...
  9. 02.XMemcached的使用
  10. [Web开发] IE文档模式终极指南
  11. 【Python】@ 操作符
  12. Alpine linux 没有apt-get安装软件方法 安装vim
  13. pycharm怎样运行python_python – 如何使用PyCharm运行doctests?
  14. bt磁力种子与php文件,使用Python实现BT种子和磁力链接的相互转换
  15. springboot进行微信公众号相关开发:(二)获取微信公众号access_token用以微信公众号各功能接口的调用
  16. Vue中使用微信JSDK实现图片上传
  17. 抖音seo矩阵系统,抖音矩阵系统源码怎么搭建?
  18. css内行样式、外部样式、内部样式
  19. 根据电路建立微分方程
  20. MySQL执行-SQL执行顺序

热门文章

  1. C++ STL标准模板库
  2. LeetCode刷题(9)
  3. Java自动化测试框架-08 - TestNG之并行性和超时篇 (详细教程)
  4. linux 用户权限 数字,几个linux命令之用户权限相关命令
  5. html5结构 客户端缓存,Javascript--离线应用与客户端储存
  6. 开启Nginx压缩,解决前端访问慢问题
  7. linux 修改bios信息,一种基于Linux系统通过IPMI工具修改BIOS选项的测试方法及系统_2017103901253_权利要求书_专利查询_专利网_钻瓜专利网...
  8. sql用户名数据迁移到mysql_如何将SQL Server数据迁移到MySQL
  9. 5.10 Ext JS Grid中 WidgetColumn(组件列)的使用
  10. 在Eclipse中使用Maven创建多模块的层级项目