自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 收藏
  • 关注

原创 MQ简单介绍

个人名片:

2023-09-21 22:53:57 297 1

原创 MQ高级-仲裁队列

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式在任意控制台查看队列:1)测试数据共享给mq1发送一条消息:然后在mq1、mq2、mq3的任意控制台查看消息:2)测试高可用现在,我们让two.queue的主节点mq1宕机:查看队列状态:1)加入集群按照下面次序依次执行①启动一个新的MQ容器:②进入容器控制台:③停止mq进程④重置RabbitMQ中的数据:⑤加入mq1:⑥再次启

2023-09-21 22:40:25 358

原创 MQ高级-镜像集群

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式结构如图:总结如下:镜像模式的配置有3种模式:语法示例:1)exactly模式2)all模式:策略名称,自定义:匹配所有以开头的队列名:策略内容:策略模式,此处是all模式,即所有节点都会称为镜像节点3)nodes模式测试运行下面的命令:下面,我们创建一个新的队列:在任意一个mq控制台查看队列:1)测试数

2023-09-21 22:39:44 184

原创 MQ高级-普通集群

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式结构如图:我们先来看普通模式集群,我们的计划部署3节点的mq集群:接下来,停止并删除当前的mq容器,我们重新搭建集群。准备集群配置在/tmp目录新建一个配置文件 rabbitmq.conf:文件内容如下:再创建一个文件,记录cookie准备三个目录,mq1、mq2、mq3:然后拷贝rabbitmq.conf、cookie文件到m

2023-09-21 22:39:00 117

原创 MQ高级-集群分类

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

2023-09-21 22:38:18 104

原创 MQ高级-惰性队列

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式基于@RabbitListener声明LazyQueue总结

2023-09-21 22:33:53 97

原创 MQ高级-消息堆积问题

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

2023-09-21 22:30:42 86

原创 MQ高级-延迟队列

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式官方的安装指南地址为:https://blog.rabbitmq.com/posts/2015/04/scheduling-messages-with-rabbitmq1)下载插件2)上传插件使用命令查看数据卷:可以得到下面结果:接下来,将课前资料中的插件()上传到这个目录即可:3)安装插件最后就是安装了,需要进入MQ容器内部来执行安装。我

2023-09-21 22:27:21 113

原创 MQ高级-TTL

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式在consumer服务的SpringRabbitListener中,定义一个新的消费者,并且声明 死信交换机、死信队列:声明一个队列,并且指定TTL发送消息,但是不要指定TTL:发送消息的日志:查看下接收消息的日志:在发送消息时,也可以指定TTL,在消息内设置有效时间:查看发送消息日志:接收消息日志:

2023-09-21 22:26:46 56

原创 MQ高级-死信交换机

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式我们在consumer服务中,定义一组死信交换机、死信队列:总结

2023-09-21 22:26:03 91

原创 MQ高级-重试机制

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式修改consumer服务的application.yml文件,添加内容:失败策略1)在consumer服务中定义处理失败消息的交换机和队列2)定义一个RepublishMessageRecoverer,关联队列和交换机测试:继续使用上面的失败消息,成功在error异常交换机中接收到了失败消息。总结

2023-09-21 22:21:23 325

原创 MQ高级-消息确认2

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式由此可知:一般,我们都是使用默认的auto即可。修改服务的application.yml文件中的mq地址,用户名,密码等配置,同时添加下面内容:修改consumer服务的SpringRabbitListener类中的方法,模拟一个消息处理异常:测试:测试可以发现,当消息处理抛异常时,消息还没有被消费者读取,就被RabbitMQ删除了。把

2023-09-21 22:20:40 38

原创 MQ高级-消息持久化

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式默认情况下,通过SpringAMQP使用mq的都是持久化的。SpringAMQP中可以通过代码指定交换机持久化:队列持久化SpringAMQP中可以通过代码指定交换机持久化:消息持久化持久化消息代码注意:

2023-09-21 22:00:48 87

原创 MQ高级-消息确认

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式消息从发送,到消费者接收,会经理多个过程:首先,导入课前资料提供的项目工程(mq-advanced-demo)注意:首先,修改publisher服务中的application.yml文件的rabbitmq的IP地址,用户名,密码等配置,并添加下面的内容:说明:修改publisher服务,添加一个:定义ConfirmCallback

2023-09-21 21:59:01 129

原创 MQ高级-单机部署

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式方式一:在线拉取方式二:从本地加载将课前资料中的mq.tar压缩包上传到虚拟机,并使用docker解压。2. 安装MQ执行下面的命令来运行MQ容器:3. 测试访问:http://[虚拟机IP地址]:15672/输入安转时设置的用户名和密码,登录。

2023-09-21 21:24:27 102

原创 服务异步通信-消息转换器

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式测试发送Object类型消息我们在consumer中利用@Bean声明一个队列:在publisher中发送消息以测试:消息转换器如果要修改只需要定义一个MessageConverter 类型的Bean即可。推荐用JSON方式序列化,步骤如下:因为publisher和consumer都需要Json依赖,所有我们在父类服务引入依赖我们在pub

2023-09-20 23:15:29 50

原创 服务异步通信-Topic

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式总结发布订阅-TopicExchangeTopicExchange与DirectExchange类似,区别在于routingKey必须是多个单词的列表,并且以 . 分割。Queue与Exchange指定BindingKey时可以使用通配符:案例:利用SpringAMQP演示TopicExchange的使用步骤1:在consumer服务声明Exc

2023-09-20 23:12:41 110

原创 服务异步通信-Direct

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式总结发布订阅-DirectExchangeDirect Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为路由模式(routes)。案例:利用SpringAMQP演示DirectExchange的使用步骤1:在consumer服务声明Exchange、Queue在consumer服务中,编写两个消费者方法,分别监听dir

2023-09-20 23:06:56 47

原创 服务异步通信-Fanout

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式发布( Publish )、订阅( Subscribe )发布订阅模式与之前案例的区别就是允许将同一消息发送给多个消费者。实现方式是加入了exchange(交换机)。常见exchange类型包括:注意:exchange负责消息路由,而不是存储,路由失败则消息丢失发布订阅-Fanout ExchangeFanout Exchange 会将接

2023-09-20 23:00:45 42

原创 服务异步通信-工作队列模型

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式案例:模拟WorkQueue,实现一个队列绑定多个消费者步骤1:生产者循环发送消息到simple.queue在publisher服务中添加一个测试方法,循环发送50条消息到simple.queue队列步骤2:编写两个消费者,都监听simple.queue在consumer服务中添加一个消费者,也监听simple.queue:消费者1

2023-09-20 21:11:26 64

原创 服务异步通信-简单队列模型

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式利用SpringAMQP实现HelloWorld中的基础消息队列功能流程如下:步骤1:引入AMQP依赖因为publisher和consumer服务都需要amqp依赖,因此这里把依赖直接放到父工程mq-demo中:步骤2:在publisher中编写测试方法,向simple.queue发送消息在publisher服务中编写applicatio

2023-09-20 21:10:20 54

原创 服务异步通信-快速入门案例

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式HelloWord案例官方的HelloWorld是基于最基础的消息队列模型来实现的,只包括三个角色:案例:完成官方Demo中的hello world案例实现步骤:导入课前资料中的demo工程mq-demo文件夹运行publisher服务中的测试类PublisherTest中的测试方法testSendMessage()查看RabbitMQ控

2023-09-20 21:04:08 43

原创 服务异步通信-常见消息模型

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式MQ的官方文档中给出了5个MQ的Demo示例,对应了几种不同的用法:一、RabbitMQ常见消息模型定义二、RabbitMQ常见消息模型应用场景及优势分析三、RabbitMQ常见消息模型实现方法及注意事项

2023-09-20 21:00:00 83

原创 服务异步通信-RabbitMQ安装

安装流程:下载镜像方式一:在线拉取方式二:从本地下载课前资料中提供了镜像压缩包mq.tar2. 安装MQ-d \15672是管理平台的端口,5672是做消息命令连接的端口–name具有唯一性,若已存在对应的name会报错,如下:3.登录rabbitmq用户名和密码为运行MQ容器是设置的-e属性USER和PASS。RabbitMQ的结构和概念RabbitMQ中的几个概念:channel:操作MQ的工具exchange:路由消息到队列中queue:缓存消息。

2023-09-20 20:43:55 94

原创 服务异步通信-MQ常见框架

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

2023-09-20 20:42:54 224

原创 服务异步通信-异步通讯

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式异步调用常见实现就是事件驱动模式。事件驱动优势:异步通讯的缺点:依赖于Broke的可靠性,安全性,吞吐能力。结构复杂了,业务没有明显的流程线,不好跟踪管理。

2023-09-20 20:35:51 102

原创 服务异步通信-同步通讯

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式总结同步调用的优点:时效性较强,可以立即得到结果同步调用存在的问题:

2023-09-20 20:33:41 43

原创 服务异步通信-认识MQ

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式三、MQ的优点:总结

2023-09-20 20:29:30 42

原创 多级缓冲-监听Canal

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式编写配置:修改Item实体类通过@Id、@Column、等注解完成Item与数据库表字段的映射:编写监听器在Redis中操作类RedisHandler中添加Redis中增加和删除操作:编写监听器重启项目:访问:http://localhost:8081/item/10003访问:http://localhos

2023-09-20 20:22:53 35

原创 多级缓冲-安装Canal

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式这里以之前用Docker运行的mysql为例开启binlog打开mysql容器挂载的日志文件,即conf下的没有my.cnf文件添加内容:配置解读:重启mysql最终效果:设置用户权限解释:效果:重启mysql容器即可测试设置是否成功:在mysql控制台,或者Navicat中,输入命令:创建网络我们需要创建一个网络,将MySQL

2023-09-20 20:22:08 39

原创 多级缓冲-缓冲同步策略

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式缓存数据同步的常见方式有三种:1)基于MQ的异步通知:解读:依然有少量的代码侵入。2)基于Canal的通知解读:代码零侵入

2023-09-19 22:46:15 73

原创 多级缓冲-Nginx本地缓冲

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式现在,整个多级缓存中只差最后一环,也就是nginx的本地缓存了。如图:1)开启共享字典,在nginx.conf的http下添加配置:实现本地缓存查询1)修改文件,修改read_data查询函数,添加本地缓存逻辑:2)修改item.lua中查询商品和库存的业务,实现最新的read_data函数:3)完整的item.lua文件:测试

2023-09-19 22:43:01 54

原创 多级缓冲-查询Redis缓冲

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式修改文件:1)引入Redis模块,并初始化Redis对象2)封装函数,用来释放Redis连接,其实是放入连接池3)封装函数,根据key查询Redis数据4)导出完整的common.lua:实现Redis查询1)修改文件,添加一个查询函数:2)而后修改商品查询、库存查询的业务:3)完整的item.lua代码:测试:重启ng

2023-09-19 22:42:21 45

原创 多级缓冲-Redis缓冲预热

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式1)利用Docker安装Redis2)在item-service服务中引入Redis依赖3)配置Redis地址4)编写初始化类缓存预热需要在项目启动时完成,并且必须是拿到RedisTemplate之后。这里我们利用InitializingBean接口来实现,因为InitializingBean可以在对象被Spring创建并且成员变量全部注入

2023-09-19 22:41:26 50

原创 多级缓冲-Id负载均衡

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式1)原理2)实现修改 文件,实现基于ID做负载均衡。首先,定义tomcat集群,并设置基于路径做负载均衡:然后,修改对tomcat服务的反向代理,目标指向tomcat集群:重新加载OpenResty3)测试启动两台tomcat服务:同时启动:http://localhost/item.html?id=10002

2023-09-19 22:38:16 57

原创 多级缓冲-Tomcat查询

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式3)实现商品查询测试:在item.lua中添加返回值:重启nginx:访问:http://localhost/item.html?id=10001结果:sold和stock为null,这两个都是库存表中的数据,说明两个表未拼接官方地址: https://github.com/openresty/lua-cjson/语法格式:实现

2023-09-19 22:32:51 39

原创 多级缓冲-参数与Tomcat

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式那么如何获取前端传递的商品参数呢?OpenResty中提供了一些API用来获取不同类型的前端请求参数:在前端发起的ajax请求如图:1)获取商品id修改文件中监听/api/item的代码,利用正则表达式获取ID:注意路径占位符前有:~2)拼接ID并返回修改文件,获取id并拼接到结果中返回:3)重新加载并测试运行命令以重新加载OpenRes

2023-09-19 21:59:56 33

原创 多级缓冲-OpenResty快速入门

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式我们希望达到的多级缓存架构如图:这个请求如下:1)添加对OpenResty的Lua模块的加载在文件中的添加下面代码:2)监听/api/item路径1)在目录创建文件夹:lua2)编写item.lua,返回假数据item.lua中,利用ngx.say()函数返回数据到Response中4)重新加载配置加载之前:加载之后:

2023-09-19 21:54:25 54

原创 多级缓冲-安装OpenResty

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式官方网站: https://openresty.org/cn/1)安装开发库首先要安装OpenResty的依赖开发库,执行命令:2)安装OpenResty仓库运行下面的命令就可以添加我们的仓库:如果提示说命令不存在,则运行:然后再重复上面的命令3)安装OpenResty然后就可以像下面这样安装软件包,比如 :4)安装opm工具如果你想安

2023-09-19 21:53:05 52

原创 多级缓冲-Lua

个人名片:本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式CentOS7默认已经安装了Lua语言环境,所以可以直接运行Lua代码。1)建立文件运行lua在Linux虚拟机的任意目录下,新建一个hello.lua文件添加下面的内容运行2)直接运行luaLua中支持的常见数据类型包括:Lua声明变量的时候无需指定数据类型,而是用local来声明变量为局部变量:Lua中的数组角标是从1开始,访

2023-09-19 21:51:46 36

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除