当前位置: 首页 > news >正文

网站建设制作定制网站用绝对路径好还是相对路径seo

网站建设制作定制,网站用绝对路径好还是相对路径seo,wordpress动态标签,东莞住建局投诉电话是多少目录 一、序言二、生产者确保消息发送成功1、为什么需要Publisher Confirms2、哪些消息会被确认处理成功 三、消费者保证消息被处理四、Spring RabbitMQ支持代码示例1、 application.yml2、RabbigtMQ配置3、可靠生产者配置4、可靠消费者配置5、测试用例 一、序言 在有些业务场… 目录 一、序言二、生产者确保消息发送成功1、为什么需要Publisher Confirms2、哪些消息会被确认处理成功 三、消费者保证消息被处理四、Spring RabbitMQ支持代码示例1、 application.yml2、RabbigtMQ配置3、可靠生产者配置4、可靠消费者配置5、测试用例 一、序言 在有些业务场景中消息是不能丢的比如分布式事务资金动账出账方扣款那么入账方就一定要收款。以前写了一篇分布式事务的文章里面的跨地区转账就是一个实际案例。 消息是有可能丢的比如生产者在发送消息时broker服务挂了消息没有来得及落盘这时消息就彻底丢了。 保证MQ消息可靠传输主要有两个方面一方面是消息生产者确保消息一定发送成功另一方面是消费者确保消息一定被处理。 二、生产者确保消息发送成功 1、为什么需要Publisher Confirms 在Spring AMQP中AmqpTemplate的实现RabbitTemplate已经支持 Publisher Confirms and Returns所谓的publisher confirms意思就是消息发布者确认消息是否已经被发送。 在RabbitMQ官方文档描述中持久化的消息在Broker重启时也是应该存活的这里的词用的是应该因为消息有可能在落地磁盘前Broker就挂了导致消息丢失。 最直接的解决方案是通过事务但是通过事务有两个问题 事务阻塞发布者必须等待Broker处理完每条消息。事务很重每次提交都会要求触发fsync()强制磁盘这个过程需要花很长的时间。 备注在RabbitMQ官方测试中通过事务去保证发布10000条消息需要花至少4分钟的时间。 而通过Publisher Confirm机制一旦Broker处理完就会确认消息而且这个过程是异步的生产者可以流式发布消息不需要等待Broker并且Broker会批量高效将消息落盘。 2、哪些消息会被确认处理成功 当Broker确认消息时会通知消息发布者消息是否被成功处理成功处理的基本规则如下 无法路由的mandatory(必须有符合条件的队列)和immediate(必须有消费者在线)类型在被basic.return后会被确认。非持久化消息在入队时会被确认。持久化消息当持久化到磁盘或者被消费者消费时会被确认。 三、消费者保证消息被处理 消费者端确保消息消费很简单关闭消息自动确认就好开启消息手动确认。当然有些场景消息只能被处理一次可以通过分布式锁来实现。 四、Spring RabbitMQ支持代码示例 1、 application.yml server:port: 8080 spring:rabbitmq:addresses: localhost:5672username: adminpassword: adminvirtual-host: /publisher-returns: truepublisher-confirm-type: correlatedlistener:type: simplesimple:acknowledge-mode: manualconcurrency: 5max-concurrency: 20prefetch: 5template:mandatory: true备注 这里一定要设置spring.rabbitmq.publisher-returns为true并且设置spring.rabbitmq.publisher-confirm-type为correlated同时设置spring.rabbitmq.template.mandatory为true。上面我们将消费者的确认模式改为了手动确认。 2、RabbigtMQ配置 Configuration public class RabbitReliableTransportConfig {/*** RabbitTemplate消息转换器配置自动将对象转换为json字符串** return*/Beanpublic MessageConverter jackson2JsonMessageConverter() {Jackson2JsonMessageConverter messageConverter new Jackson2JsonMessageConverter();messageConverter.setClassMapper(new DefaultJackson2JavaTypeMapper());return messageConverter;}Beanpublic Queue reliableQueue() {return QueueBuilder.durable(reliable-queue).build();} }3、可靠生产者配置 Slf4j Component RequiredArgsConstructor public class RabbitMqReliableProducer {private final RabbitTemplate rabbitTemplate;public void sendReliableMsg(String body) {// 发送可靠消息ReliableMsgDTO reliableMsgDTO ReliableMsgDTO.builder().body(body).build();CorrelationData correlationData new CorrelationData();rabbitTemplate.convertAndSend(reliable-queue, reliableMsgDTO, correlationData);// 发送确认逻辑CompletableFutureConfirm future correlationData.getFuture().completable();future.whenComplete((confirm, throwable) - {if (confirm.isAck()) {log.info(消息已经被成功发送, 消息内容:{}, JSON.toJSONString(reliableMsgDTO));return;}log.warn(消息发送未成功发送, 原因:{}, 消息内容:{}, confirm.getReason(), JSON.toJSONString(reliableMsgDTO), throwable);// 5秒后再发送LockSupport.parkNanos(5 * 1000 * 1000 * 1000L);rabbitTemplate.convertSendAndReceive(reliableMsgDTO, correlationData);});} }4、可靠消费者配置 Slf4j Component public class RabbitMQReliableConsumer {RabbitListener(queues reliable-queue)public void handleMsgFromQueue(ReliableMsgDTO reliableMsgDTO, Channel channel, Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {channel.basicAck(tag, false);// channel.basicNack(tag, false, false);log.info(Message received from queue, message body: {}, JSON.toJSONString(reliableMsgDTO));} }备注这里我们开启了消息的手动确认如果消息处理失败没有确认那么消息将会在下次消费者参加连接时再次被投递。 5、测试用例 测试结果如下每当消息发送至Broker成功后会触发回调如果消息发送失败将会触发重新发送。 2024-01-20 18:13:11.399 INFO 12316 --- [78.107.127:5672] c.u.r.i.p.RabbitMqReliableProducer : 消息已经被成功发送, 消息内容:{body:hello} 2024-01-20 18:13:11.399 INFO 12316 --- [ntContainer#0-5] c.u.r.i.c.RabbitMQReliableConsumer : Message received from queue, message body: {body:hello}
http://www.w-s-a.com/news/976650/

相关文章:

  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案
  • 网站建设和维护工作内容网站的空间与域名