电商项目——消息队列——第十一章——中篇

电商项目——全文检索-ElasticSearch——第一章——中篇
电商项目——商城业务-商品上架——第二章——中篇
电商项目——商城业务-首页——第三章——中篇
电商项目——性能压测——第四章——中篇
电商项目——缓存——第五章——中篇
电商项目——商城业务-检索服务——第六章——中篇
电商项目——商城业务-异步——第七章——中篇
电商项目——商品详情——第八章——中篇
电商项目——认证服务——第九章——中篇
电商项目——购物车——第十章——中篇
电商项目——消息队列——第十一章——中篇
电商项目——订单服务——第十二章——中篇
电商项目——分布式事务——第十三章——中篇

1:RabbitMQ简介

  • 概述
    在这里插入图片描述
    我们来讲一下队列和主题中的点对点式和发布订阅式的概念
    在这里插入图片描述

  • 消息代理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 分布式中的使用场景:

  1. 异步处理
    假设我们注册用户信息到数据库,分为3步,第一步,我们先将注册的信息保存到数据库中花费50ms,第二步,发送邮件告诉注册者注册成功花费50ms,第三步,还有发送通知短信告诉注册者又花费50ms,这是一个同步模式,用户注册完到用户看到注册完的提示信息后,我们花费了150ms(就是第一张图);其实我们可以把发送邮件告诉注册者注册成功和送通知短信告诉注册者启动一个异步任务,这样就可以大大缩短花费时间(第二张图);但是实际上我们连异步都不要,我们可以将在注册到数据库上成功的消息保存在消息队列里面,至此我们直接给用户返回(消息队列的存取速度很快),这样我们实际只要花费55ms,其他服务在去消息队列中取消息
    在这里插入图片描述

  2. 应用解耦
    我们以下一个订单为例,我们下了一个订单,库存要执行出库操作,比如下订单的方法api传入三个参数,调库存方法存入五个参数,如果我们的库存服务一升级,订单服务就要修改源代码重新部署,我们就可以引入消息队列,我们给订单系统下完订单以后,我们就可以给消息队列中存入消息,库存消息不关系库存的接口是什么样,只需要实时的订阅消息队列里面的内容,只要有内容库存系统就可以实时收到消息,然后就可以得到什么样的消息,减去什么样的订单;我们下完订单以后,库存系统无需再知道订单系统的接口就可以完成操作了,这就是应用解耦;
    在这里插入图片描述

  3. 流量监控(流量削峰)
    对于一些秒杀商品来说,瞬间流量会非常大,如果一百万个请求同时进入业务代码可呢会导致机器宕机,我们可以将大并发的请求进来存取到消息队列中,后台的业务处理就不着急调用,后台根据它的能力来进行消费
    在这里插入图片描述

2:RabbitMQ工作流程

RabbitMQ概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3:RabbitMQ安装

在这里插入图片描述

#  rabbitmq安装命令
docker run --name rabbitmq \
 -p 5671:5671 -p 5672:5672 \
 -p 4369:4369 -p 25672:25672 \
 -p 15671:15671 \
 -p 15672:15672 \
 rabbitmq:management

安装完以后,我们就可以使用虚拟机ip+15672(web管理后台端口)来打开rabbitmq的图形化界面
在这里插入图片描述

4:Exchange类型

前面我们安装好了rabbitmq,现在我们就来测试rabbitmq的使用,我们来看下Exchanges和Queues是怎么工作的
我们先来看一下RabbitMQ的运行机制
在这里插入图片描述
在这里插入图片描述
Exchange的四种类型介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 发消息是发给交换机,监听消息是来监听队列
  • 我们接下来就可以在整个rabbitmq的图形化界面进行测试
    创建一个交换机
    在这里插入图片描述
    创建一个队列
    在这里插入图片描述
    交换机与队列进行绑定
    在这里插入图片描述

5:Direct-Exchange

在这里插入图片描述
我们来创建出上面的三个交换机和四个队列来进行演示
大家可以根据上面三种交换机的介绍自行测试

6:Fanout-Exchange

大家可以根据上面三种交换机的介绍自行测试

7:Topic-Exchange

大家可以根据上面三种交换机的介绍自行测试

8:SpringBoot整合RabbitMQ

SpringBoot整合RabbitMQ三步曲
在这里插入图片描述
第一步:在mall-order中导入如下依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
/**
 * 使用RabbitMQ
 * 1:引入amqp场景:RabbitAutoConfiguration就会自动生效
 * 2:RabbitAutoConfiguration就会自动生效给容器中自动配置了
 * CachingConnectionFactory  RabbitTemplateConfigurer  RabbitTemplate RabbitMessagingTemplate amqpAdmin
 * // @Bean
 public CachingConnectionFactory rabbitConnectionFactory(RabbitProperties properties,
 上面代码可以知道我们要去application.yml种进行配置
所有的属性都是在下面的类中绑定
 @ConfigurationProperties(prefix = "spring.rabbitmq")
 public class RabbitProperties {
 3:给配置文件中配置spring.rabbitmq信息
 *  4:@EnableRabbit :这种注解用到了非常多开启相关功能
 */

我们接下来就在mall-order中的test下进行测试
第二步:给配置文件中配置spring.rabbitmq信息(我配置在了nacos config)

spring.rabbitmq.host=192.168.56.10
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=\

第三步:添加@EnableRabbit :这种注解用到了非常多开启相关功能

@EnableRabbit
@EnableDiscoveryClient
@SpringBootApplication
public class MallOrderApplication {
   

	public static void main(String[] args) {
   
		SpringApplication.run(MallOrderApplication.class, args);
	}

}

9:AmqpAdmin使用

创建一个交换机

	@Test
	void createExchange() {
   
		DirectExchange directExchange = new DirectExchange("hello-java-exchange", true, false);
		amqpAdmin.declareExchange(directExchange);
		log.info("交换机:hello-java-exchange【】创建成功");
	}
交换机:hello-java-exchange【】创建成功

在这里插入图片描述
创建一个队列

	@Test
	void createQueue() {
   

//true if we are declaring an exclusive queue (the queue will only be used by the declarer's
	 * connection)
		Queue queue = new Queue("hello-java-queue", true, false, false);
		amqpAdmin.declareQu
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值