All Projects → suxiongwei → Springboot Rabbitmq

suxiongwei / Springboot Rabbitmq

RabbitMQ的简单介绍、安装及与SpringBoot整合构建高可用的消息传递方案

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Springboot Rabbitmq

Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+17024.06%)
Mutual labels:  mybatis, mysql, spring-boot, rabbitmq
Cookbook
🎉🎉🎉JAVA高级架构师技术栈==任何技能通过 “刻意练习” 都可以达到融会贯通的境界,就像烹饪一样,这里有一份JAVA开发技术手册,只需要增加自己练习的次数。🏃🏃🏃
Stars: ✭ 428 (+33.75%)
Mutual labels:  mybatis, mysql, spring-boot, rabbitmq
Web Development Interview With Java
Java 开发相关技术栈(大中厂)高频面试问题收录。
Stars: ✭ 69 (-78.44%)
Mutual labels:  mybatis, mysql, spring-boot
Springboot Templates
springboot和dubbo、netty的集成,redis mongodb的nosql模板, kafka rocketmq rabbit的MQ模板, solr solrcloud elasticsearch查询引擎
Stars: ✭ 100 (-68.75%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Superman
Superman是什么:构建Java 高级开发技术的知识体系,从基础不断打怪升级成为超人之路(更新中.......)
Stars: ✭ 106 (-66.87%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Mycollab
An open source, free, high performance, stable and secure Java Application Business Platform of Project Management and Document
Stars: ✭ 1,063 (+232.19%)
Mutual labels:  mybatis, mysql, spring-boot
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+3098.75%)
Mutual labels:  mybatis, mysql, rabbitmq
Supermarket
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器上,不断完善中……
Stars: ✭ 1,278 (+299.38%)
Mutual labels:  mybatis, mysql, rabbitmq
Spring Boot Quick
🌿 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等📌
Stars: ✭ 1,819 (+468.44%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Xupdateservice
Use Spring Boot easy build, Gradle build, and provide update service for XUpdate.(使用Spring Boot简易搭建,Gradle构建,为XUpdate提供更新服务)
Stars: ✭ 149 (-53.44%)
Mutual labels:  mybatis, mysql, spring-boot
Spring Boot Examples
个人学习 SpringBoot2.x 写的一些示例程序,目前正在持续更新中.....
Stars: ✭ 159 (-50.31%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Springboot Beginner
🔰 📝 这可能是流程最清晰、代码最干净、注释最详细的 SpringBoot 入门项目咯,对于初学 SpringBoot 的同学非常具有参考与学习价值哟 ~
Stars: ✭ 51 (-84.06%)
Mutual labels:  mybatis, mysql, spring-boot
Springbootunity
rabbitmq、redis、scheduled、socket、mongodb、Swagger2、spring data jpa、Thymeleaf、freemarker etc. (muti module spring boot project) (with spring boot framework,different bussiness scence with different technology。)
Stars: ✭ 845 (+164.06%)
Mutual labels:  mybatis, mysql, spring-boot
Blog
SpringBoot + Mybatis + thymeleaf 搭建的个人博客 http://www.54tianzhisheng.cn/
Stars: ✭ 1,156 (+261.25%)
Mutual labels:  mybatis, mysql, spring-boot
Newbee Mall
🔥 🎉newbee-mall 项目(新蜂商城)是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。
Stars: ✭ 8,319 (+2499.69%)
Mutual labels:  mybatis, mysql, spring-boot
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+2360.63%)
Mutual labels:  mybatis, mysql, rabbitmq
Springbootlearning
《Spring Boot教程》源码
Stars: ✭ 2,065 (+545.31%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Music Website
🎧 Vue + SpringBoot + MyBatis 音乐网站
Stars: ✭ 673 (+110.31%)
Mutual labels:  mybatis, mysql, spring-boot
Spring Boot Examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
Stars: ✭ 26,812 (+8278.75%)
Mutual labels:  mybatis, spring-boot, rabbitmq
Nimrod
Nimrod - 基于 Spring Boot 构建 的 Java Web 平台企业级单体应用快速开发框架,适合中小型项目的应用和开发。所采用的技术栈包括 Spring Boot、Spring、Spring Web MVC、MyBatis、Thymeleaf 等,遵守阿里巴巴 Java 开发规约,帮助养成良好的编码习惯。整体采用 RBAC ( Role-Based Access Control ,基于角色的访问控制),具有严格的权限控制模块,支持系统与模块分离开发。最后希望这个项目能够对你有所帮助。Nimrod 开发交流群:547252502(QQ 群)
Stars: ✭ 125 (-60.94%)
Mutual labels:  mybatis, mysql, spring-boot

1、RabbitMQ简单介绍:

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间传递数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。

推介一篇文章:SpringBoot+RabbitMQ ,保证消息100%投递成功并被消费(附源码)

1.1、特点:

  1. RabbitMQ底层使用Erlang语言编写,传递效率高,延迟低
  2. 开源、性能优秀、稳定性较高
  3. 与SpringAMQP完美的整合、API丰富
  4. 集群模式丰富、表达式配置、HA模式、镜像队列模式
  5. 保证数据不丢失的情况下,做到高可用
  6. AMQP全称:Advanced Message Queuing Protocol
  7. AMQP翻译:高级消息队列协议

1.2、 AMQP核心概念

  • Server:又称Broker,接收客户端的连接,实现AMQP实体服务

  • Connection:连接,应用程序与Broker的网络连接

  • Channel:网络信道,几乎所有的操作都在Channel中进行,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。Channel是进行消息读写的通道。客户端可以建立多个Channel,每个Channel代表一个会话任务。

  • Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容。

  • Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual host可以有若干个Exchange和Queue,同一个Virtual host里面不能有相同的Exchange和Queue

  • Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列

    RabbitMQ中有三种常用的交换机类型

    • direct: 如果路由键匹配,消息就投递到对应的队列
    • fanout:投递消息给所有绑定在当前交换机上面的队列
    • topic:允许实现有趣的消息通信场景,使得5不同源头的消息能够达到同一个队列。topic队列名称有两个特殊的关键字。
  • Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key

  • Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息

  • Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者,多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

  • Prefetch count:如果有多个消费者同时订阅同一个Queue中的消息,Queue中的消息会被平摊给多个消费者。这时如果每个消息的处理时间不同,就有可能会导致某些消费者一直在忙,而另外一些消费者很快就处理完手头工作并一直空闲的情况。我们可以通过设置prefetchCount来限制Queue每次发送给每个消费者的消息数,比如我们设置prefetchCount=1,则Queue每次给每个消费者发送一条消息;消费者处理完这条消息后Queue会再给该消费者发送一条消息。

1.3、消息流转流程图

image

2、RabbitMQ整合SpringBoot2.x,消息可靠性传递方案100%的实现

2.1、方案流程图

image

2.2、 代码实现

  1. 引入相关依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  1. 配置application.yml
## producer配置
spring:
  rabbitmq:
    addresses: 192.168.221.128:5672
    username: guest
    password: guest
    virtual-host: /
  datasource:
    url: jdbc:mysql://localhost:3306/rabbitmq?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    username: root
    password: root
    driverClassName: com.mysql.jdbc.Driver
server:
  port: 8001
  servlet:
    context-path: /
## consumer配置
## springboot整合rabbitmq的基本配置
spring:
  rabbitmq:
    addresses: 192.168.221.128:5672
    username: guest
    password: guest
    virtual-host: /
## 消费端配置
    listener:
      simple:
        concurrency: 5
        acknowledge-mode: manual
        max-concurrency: 10
        prefetch: 1
  datasource:
      url: jdbc:mysql://localhost:3306/rabbitmq?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
      username: root
      password: root
      driverClassName: com.mysql.jdbc.Driver
server:
  port: 8002
  servlet:
    context-path: /

2.3、演示步骤:

  1. 修改配置文件中的rabbitmq配置和数据库配置

  2. run ConsumerApplication 来开启消费者服务

  3. run ProducerApplication 来开启生产者服务

  4. run SpringbootProducerApplicationTests 中的testSend方法来发送消息进行测试

2.4、数据库文件

-- ----------------------------
-- Table structure for broker_message_log
-- ----------------------------
DROP TABLE IF EXISTS `broker_message_log`;
CREATE TABLE `broker_message_log` (
  `message_id` varchar(255) NOT NULL COMMENT '消息唯一ID',
  `message` varchar(4000) NOT NULL COMMENT '消息内容',
  `try_count` int(4) DEFAULT '0' COMMENT '重试次数',
  `status` varchar(10) DEFAULT '' COMMENT '消息投递状态 0投递中,1投递成功,2投递失败',
  `next_retry` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '下一次重试时间',
  `create_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`message_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_order
-- ----------------------------
DROP TABLE IF EXISTS `t_order`;
CREATE TABLE `t_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `message_id` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2018091102 DEFAULT CHARSET=utf8;

代码实例及学习参考内容来自慕课网课程RabbitMQ消息中间件极速入门与实战

3、学习记录

  1. RabbitMQ安装与配置
  2. RabbitMQ:消息发送确认与消息接收确认(ACK)
  3. 消息中间件选型分析——从Kafka与RabbitMQ的对比来看全局
  4. RabbitMQ必备核心知识
  5. Spring Boot 实现 RabbitMQ 延迟消费和延迟重试队列
  6. IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?
  7. (转载)如何保证消息队列的高可用?
  8. (转载)为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
  9. (转载)如何保证消息的可靠性传输?(如何处理消息丢失的问题)

4、其它

4.1、RPC和MQ各自适合的应用场景

  • RPC比较适合- 客户端调用哪个服务器比较明确调用需要立即得到返回结果 架构简单 在一个由多个微服务构成的大系统中,某些关键服务间的调用应当在较短的时间内返回,而且各个微服务的专业化程度较高,同一个请求的关注者只有一个。这个时候就应该用RPC。 比如在一个ERP系统中,有一个管理仓储的微服务,以及一个负责订单的微服务。新建订单时需要查知当前的存货是否充足,如果不充足就通知用户;提交订单时预订指定数量的货物,如果此时货物不错,也要终止订单的提交,并通知用户。显然在这种场景下是不允许较大的延迟,否则会影响用户体验。所以应该使用RPC,及时返回仓储情况。

  • MQ比较适合消息的发送者和消费者需要解耦的情况发送者并不明确谁是消费者发送者并不关心谁来消费消息 各个消费者可以从不同的角度入手处理消息消费者的处理结果也不返回给发送者消息的发送和处理是异步的 消息的关注者不止一个 在一个由多个微服务构成的大系统中,会有一些非关键服务,用来执行一些不需要立刻得到结果的计算。而且它们的计算结果并不会返回给消息的发送者。这个时候就应该使用MQ。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].