- 博客(37)
- 收藏
- 关注
原创 RabbitMQ基础及同步通信&异步通信
而现在支付服务向broker发布事件,这个时候支付服务就可以立即结束告诉用户支付成功了(后续的订饭服务、仓储服务、短信服务和支付服务是没有关系的),后续的服务由Broker去通知他们完成,而他们什么时候完成,耗时多久和支付服务并没有任何的关系,只能能做完就行。而如果说不需要对方的结果,只是希望对方能干一件事情,对吞吐量的要求、并发的要求较高,还希望解除服务间的耦合关系,那此时应该使用异步通信。因为之前我们支付服务要调取订单服务、仓储服务、短信服务等,每个服务都有一定的耗时,总耗时就是四个服务的耗时之和;
2025-04-10 21:48:38
297
原创 分布式事务
TM提交、回滚全局事务,TC检查分支事务状态,TC提交/回滚RM,一阶段都成功,则提交,删除undo-log,一阶段有失败,则回滚,恢复undo-log日志,删除undo-log。RM (Resource Manager):资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。TM开启全局事务,调用分支RM,RM向TC注册分支事务,RM执行业务sql并提交记录undo-log(数据快照),RM向TC报告事务状态。:因为网络是不可靠的。
2023-09-26 08:38:14
87
原创 Elasticsearch
query(QueryBuilders.multiMatchQuery("上海", "name", "city", "business"));searchRequest.source().query(QueryBuilders.termQuery("brand", "汉庭"));//-------------------------------------索引操作--------------------------.query(QueryBuilders.matchQuery("all","如家"))
2023-09-18 23:16:31
114
原创 消息队列后台管理和Elasticsearch的实时更新
throw new InvalidParameterException("id不能为空");log.warn("创建Es的Rest客户端");技术栈:RabbitMQ、Elasticsearch。* 新增同步数据到ES。* 更新数据同步到ES。* 删除数据同步到ES。//MybatisPlus接口。
2023-09-18 23:10:04
189
原创 Elasticsearch
4.mysql中的schema-------》Elasticsearch中的mapping,索引中文档的约束,例如字段类型约束。5.mysql中的sql-------》Elasticsearch中的dsl,提供json风格的请求语句,实现crud。2.mysql中的row-------》Elasticsearch中的document,文档内容都是json格式。3.mysql中的column------》Elasticsearch中的field,json文档中的字段。还能搜索到手机相关的品牌数据等。
2023-09-15 19:55:39
79
1
原创 DelayExchange插件
log.info("延时队列delay.queue收到的消息: {}", message);3.如果有x-delay属性,说明是延迟消息,持久化到硬盘,读取x-delay值,作为延迟时间。4.x-delay时间到期后,重新投递消息到指定队列。log.warn("消息发送成功了");2.判断消息是否具备x-delay属性。* 测试延时队列 : 插件。//订单超时未支付处理代码。
2023-09-14 17:56:38
95
原创 死信交换机延时队列
deadLetterRoutingKey("ttl") //把死信投递到死信交换机的路由key。.deadLetterExchange("dl.ttl.direct") //死信交换机名称。log.info("死信队列 dl.ttl.queue收到的消息:{}", message);//这个队列无人消费,并且超过时间,消息才会变成死信,路由死。//声明普通队列投递到死信交换机、交换机、绑定关系。//----------------死信队列。//消息所在的队列设置了超时时间。
2023-09-14 17:30:35
71
原创 RabbitMQ消费者ack
none:只要消息到达消费者,即使消费者宕机了,Spring依然直接返回ack到MQ,确认签收;MQ收到ack,会把队列中的消息删除,消息会丢失。multiplier: 2 #失败的等待时长倍数,下次等待时长 = multiplier * last-interval。log.info("direct.queue1收到的消息:{}", message);//失败策略:重试次数耗尽后,会把消息投递到错误的队列,由错误队列去消费。//手动ack,让消息重回队列,参数三表示是否重回队列。
2023-09-14 16:08:13
227
原创 RabbitMQ消息持久化
MessageProperties messageProperties = new MessageProperties();messageProperties.setDeliveryMode(MessageProperties.DEFAULT_DELIVERY_MODE);messageProperties.setMessageId("messageId");Message message = new Message("hello666".getBytes(StandardCharsets.UTF
2023-09-14 14:39:29
119
原创 RabbitMQ保证消息不丢失生产者确认机制
log.error("发送消息出问题了:" + ex.getMessage() + " --- " + correlationData.getId());log.warn("666---> 消息正确到达交换机:" + correlationData.getId());log.info("消息发送失败,应答码{},原因{},交换机{},路由键{},消息{}",log.info("发送失败,重新发送消息--->222");//消息发送失败回调的方法,一个消息对应一个。// 投递失败,记录日志。
2023-09-14 12:16:38
157
原创 AMQP创建交换机和队列的两种方式
System.out.println("itheima.fanout.queue1收到的消息:"+message);System.out.println("收到的消息fan1:"+message);System.out.println("收到的消息fan2:"+message);//队列fanoutQueue1绑定交换机itcastFanout。//队列fanoutQueue2绑定交换机itcastFanout。//Fanout交换机。直接创建交换机和队列以及监听。
2023-09-14 11:43:54
130
原创 RabbitMQ初始代码
System.out.println("消息内容:" + new String(body));* @param autoDelete 是否自动删除。* @param arguments 队列其他参数。* exchange 交换机,默认的交换机是""* @param exclusive 是否排它。* byte[] body 消息内容。* @param durable 是否持久化。* @param queue 队列名称。//3.声明交换机与队列。* body 消息内容。//3.声明交换机与队列。
2023-09-14 11:41:15
54
原创 主流消息中间件
2.RabbitMQ协议支持AMQP,消息可靠性高,单机吞吐量一般,几千几万。3.RocketMQ阿里,向外开发的功能存在局限。4.Kafka单节点的吞吐量高,消息可靠性不高。1.ActiveMQ几乎过时了。
2023-09-14 08:53:58
55
原创 AMQP五种模式
一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert。通过交换机,通过路由key的精确名称把消息路由到队列,实现群发。通过交换机,通过路由key的部分名称把消息路由到队列,实现群发。通过交换机,把消息路由到队列,实现群发。路由key【Routingkey】多个消费者之间是竞争关系。一个生产者,一个消费者。一个生产者,多个消息者。一个生产者,多个消息者。一个生产者,多个消息者。#:匹配一个或多个字符。
2023-09-14 08:30:49
64
原创 HashMap
如果链表长度超过1,会通过高低算法,把老数组下标对应的链表进行拆分,一半放新数组对应老数组原下标的位置,另一半放新数组下标【老数组下标+老数组长度】8.如果hash值相等,则比较equals方法,如果相等,则覆盖value值,但是key还是原来的。7.如果该位置不为null,先依次比较该位置下的链表元素的hash值是否相等,如果不相等直接存入。// 2、遍历全部的键,根据键获取其对应的值。3.当数组的长度到达12的时候,数组自动扩容为原来长度的2倍。// 根据键获取对应的值。
2023-09-10 18:51:31
57
原创 分布式、微服务、SpringCloud
服务发现:负载均衡,使用Ribbon组件,通过一个 LoadBalancerInterceptor,通过服务名获取到服务列表,再通过负载均衡策略 选择一台真正服务 器,进行选择调用,由IRule接口来指定负载策略; 集群:优先访问指定集群,如果指定集群不能使用,则可访问其他集群,可以通过nacos配置集群权重 环境隔离:只有在同一个命名空间及同组中的微服务才能正常调用服务 配置中心:bootstrap.yml的优先级要高于application.yml;单一职责:拆分后的服务对应唯一的业务能力;
2023-09-08 22:54:14
55
原创 RestTemplate的使用
/方式三:restTemplate.exchange(url, HttpMethod.GET, userHttpEntity, User.class)//方式一:restTemplate.getForObject(url, User.class)//方式二:restTemplate.getForEntity(url, User.class)//exchange:最完整的API,可以传递请求实体,请求头......//获取用户id查询用户。
2023-09-06 21:19:06
56
原创 mybatisplus相关配置和使用
依赖spring:# 开启mp的日志(输出到控制台)db-config:#全局设置实体类主键设置方式#全局设置表名。
2023-09-05 21:49:04
139
1
原创 Linux常用命令
ip addr 查看ippwd 查看当前目录shutdown -h now 立即关机reboot 重启ping ip或域名 查看网络是否OKctrl+c 强制结束占用窗口的命令top 查看内存情况top -p pid 查看进程内存情况kill -9 pid 强制杀死指定进程ps -ef | grep -i pid/进程名字 查看进程运行信息(|管道命令)clear 清屏history 查看历史命令!历史命令编号 执行历史命令具体命令 -h 查看具体命令的帮助信息。
2023-09-03 21:22:54
45
原创 小程序端微信支付流程
编写支付请求代码:通过在Java代码中引入支付SDK,使用微信支付API实现支付功能。注册微信支付商户账号:在微信支付商户平台(pay.weixin.qq.com)上注册并登录,完成商户信息的填写和审核。小程序支付接入:在小程序开发中引入微信支付相关的API,编写支付相关逻辑。调用统一下单API生成预支付订单,前端页面调用支付API调起支付。接入模式选择:微信支付支持多种接入模式,如APP支付、H5支付、小程序支付等。配置支付回调接口:在Java应用中,编写处理微信支付回调的接口。
2023-09-02 21:44:27
138
原创 springboot如何实现约定大于配置
各个框架主动提供一套默认的配置给springboot springboot会自动扫描相关包下的相关文件,找到后,如果需要加载到IOC容器中,就加载进去 springboot默认从所有依赖的meta-inf目录下找到两个约定的文件 springboot找到文件中所有的配置类,当满足条件时,把配置类中的对象放入IOC容器中 @SpringBootConfiguration相当于@Configuraiton,表示这是个配置类 @EnableAutoConfiguration找到meta-inf/spri
2023-08-29 21:48:14
164
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人