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

有什么网站可以做微信支付宝百度网站推广价格

有什么网站可以做微信支付宝,百度网站推广价格,东莞市凤岗建设局网站,网页设计模板html代码怎么学文章目录 生产者消息确认机制概述confirm 代码实现return 代码实现 生产者消息确认机制 概述 为了保证信息 从生产者 发送到 队列,因此引入了生产者的消息确认机制. RabbitMQ 提供了两种解决方案: 通过事务机制实现.通过发送确认机制(confi…

文章目录

  • 生产者消息确认机制
    • 概述
    • confirm 代码实现
    • return 代码实现

生产者消息确认机制


概述

在这里插入图片描述
为了保证信息 从生产者 发送到 队列,因此引入了生产者的消息确认机制.

RabbitMQ 提供了两种解决方案:

  • 通过事务机制实现.
  • 通过发送确认机制(confirm 和 return)实现.

因为事务机制比较消耗性能,在实际工作中用的也不多,因此这里主要介绍 confirm 和 return 机制来实现发送放的确认.

a)confirm 确认模式
在这里插入图片描述
如上图,confirm 确认模式主要保障于 生产者 到 交换机 的消息可靠性.

具体的,在生产者发送消息之前,给 RabbitTemplate 设置一个 ConfirmCallback 回调监听:

  • 如果 Exchange 成功收到消息,那么 ConfirmCallback 这个回调 ack 参数就为 true
  • 如果 Exchange 没有收到消息,那么 ConfirmCallback 这个回调 ack 参数就为 false

b)return 退回模式
在这里插入图片描述
如上图,confirm 确认模式主要保障于 交换机 到 队列 的消息可靠性.

具体的,在生产者发送消息之前,给 RabbitTemplate 设置一个 ReturnsCallback 回调监听:

  • 如果 Queue 成功收到 Exchange 的消息,那么 ReturnsCallback 回调监听 就不会收到任何消息.
  • 如果 Queue 没有收到 Exchange 的消息,那么 ReturnsCallback 回调监听 就会收到该消息.

confirm 代码实现

a)配置文件

spring:application:name: rabbitmqrabbitmq:host: env-baseport: 5672username: rootpassword: 1111publisher-confirm-type: correlated # 开启发送方确认机制

b)交换机、队列、绑定配置

    @Bean("confirmExchange")fun confirmExchange() = DirectExchange(MQConst.CONFIRM_EXCHANGE)@Bean("confirmQueue")fun confirmQueue() = Queue(MQConst.CONFIRM_QUEUE)@Bean("confirmBinding")fun confirmBinding(@Qualifier("confirmExchange") exchange: DirectExchange,@Qualifier("confirmQueue") queue: Queue,): Binding = BindingBuilder.bind(queue).to(exchange).with(MQConst.CONFIRM_BINDING)

c)confirmRabbitTemplate Bean 配置

@Configuration
class MQTemplateConfig {/*** 这个配置一定要有!!!(或者有大于等于 2 个的 RabbitTemplate Bean)** 这是由于 Autowired 注解自身的原因(以 rabbitmq 为例):* 如果配置文件中配置 rabbitmq 相关连接信息,那么 spring 会自动为其创建 RabbitTemplate Bean 对象* 如果配置文件中配置 rabbitmq 相关连接信息,而且代码中也配置了一个 RabbitTemplate 的 Bean(名称为 confirmRabbitTemplate),那么 Spring 将不会自动配置默认的 RabbitTemplate Bean 对象* 这就导致,我们无论代码写的注入的是 rabbitTemplate 还是 confirmRabbitTemplate,但实际上注入的都是 confirmRabbitTemplate*/@Bean("rabbitTemplate")fun rabbitTemplate(connectionFactory: ConnectionFactory): RabbitTemplate {return RabbitTemplate(connectionFactory)}@Bean("confirmRabbitTemplate")fun confirmRabbitTemplate(connectionFactory: ConnectionFactory): RabbitTemplate {val tpl = RabbitTemplate(connectionFactory)tpl.setConfirmCallback(RabbitTemplate.ConfirmCallback { correlationData, ack, cause ->println("执行了 confirm ...")if (ack) {println("confirm ack: { 消息id: ${correlationData?.id} }")} else {println("confirm nack: { 消息id: ${correlationData?.id}, cause: $cause }")//进行相应的业务处理...}})return tpl}}

d)生产者接口

@RestController
@RequestMapping("/mq")
class MQApi(val confirmRabbitTemplate: RabbitTemplate
) {@RequestMapping("/confirm")fun confirm(): String {val data = CorrelationData("1")confirmRabbitTemplate.convertAndSend(MQConst.CONFIRM_EXCHANGE, MQConst.CONFIRM_BINDING, "confirm msg 1", data)return "ok"}}

此处演示无需消费者…

e)消息正确的路由到交换机,效果如下:
在这里插入图片描述
在这里插入图片描述

f)消息没有找到交换机(发送消息时,写了一个不存在的交换机的名字),效果如下:
在这里插入图片描述
在这里插入图片描述

return 代码实现

a)配置文件

spring:application:name: rabbitmqrabbitmq:host: env-baseport: 5672username: rootpassword: 1111publisher-confirm-type: correlated # 开启发送方确认机制

b)bean 的配置

@Configuration
class MQTemplateConfig {/*** 这个配置一定要有!!!(或者有大于等于 2 个的 RabbitTemplate Bean)** 这是由于 Autowired 注解自身的原因(以 rabbitmq 为例):* 如果配置文件中配置 rabbitmq 相关连接信息,那么 spring 会自动为其创建 RabbitTemplate Bean 对象* 如果配置文件中配置 rabbitmq 相关连接信息,而且代码中也配置了一个 RabbitTemplate 的 Bean(名称为 confirmRabbitTemplate),那么 Spring 将不会自动配置默认的 RabbitTemplate Bean 对象* 这就导致,我们无论代码写的注入的是 rabbitTemplate 还是 confirmRabbitTemplate,但实际上注入的都是 confirmRabbitTemplate*/@Bean("rabbitTemplate")fun rabbitTemplate(connectionFactory: ConnectionFactory): RabbitTemplate {return RabbitTemplate(connectionFactory)}@Bean("confirmRabbitTemplate")fun confirmRabbitTemplate(connectionFactory: ConnectionFactory): RabbitTemplate {val tpl = RabbitTemplate(connectionFactory)tpl.setConfirmCallback(RabbitTemplate.ConfirmCallback { correlationData, ack, cause ->println("执行了 confirm ...")if (ack) {println("confirm ack: { 消息id: ${correlationData?.id} }")} else {println("confirm nack: { 消息id: ${correlationData?.id}, cause: $cause }")//进行相应的业务处理...}})//这里可以和 confirm模式 一起配置//mandatory = true 属性是在告诉 rabbitmq,如果一个消息无法被任何队列消费,那么该消息就会返回给发送者,此时 ReturnCallback 就会被触发//mandatory 相当于是开启 ReturnsCallback 前提tpl.setMandatory(true)tpl.setReturnsCallback(RabbitTemplate.ReturnsCallback { returned ->println("执行了 return ...")println("return: $returned")})return tpl}}

c)生产者接口

@RestController
@RequestMapping("/mq")
class MQApi(val confirmRabbitTemplate: RabbitTemplate
) {@RequestMapping("/confirm")fun confirm(): String {val data = CorrelationData("1")confirmRabbitTemplate.convertAndSend(MQConst.CONFIRM_EXCHANGE, MQConst.CONFIRM_BINDING, "confirm msg 1", data)return "ok"}}

d)正确的路由到队列,效果如下:
可以看到只有 confirm模式 被触发.
在这里插入图片描述
e)没有路由到队列(发送消息时,我改成了一个不存在的 routingKey 名字),效果如下:
在这里插入图片描述

在这里插入图片描述


文章转载自:
http://neuropsychosis.brjq.cn
http://mastoidal.brjq.cn
http://civilise.brjq.cn
http://meiobar.brjq.cn
http://embarcation.brjq.cn
http://gangleader.brjq.cn
http://medieval.brjq.cn
http://keckling.brjq.cn
http://naturalism.brjq.cn
http://litho.brjq.cn
http://transhydrogenase.brjq.cn
http://forfeitable.brjq.cn
http://linetype.brjq.cn
http://dlemocrat.brjq.cn
http://wyvern.brjq.cn
http://vomito.brjq.cn
http://demyelination.brjq.cn
http://howsoever.brjq.cn
http://crusian.brjq.cn
http://grainsick.brjq.cn
http://paraumbilical.brjq.cn
http://msme.brjq.cn
http://timber.brjq.cn
http://diamagnetism.brjq.cn
http://plainclothesman.brjq.cn
http://cossie.brjq.cn
http://documentarist.brjq.cn
http://vagal.brjq.cn
http://lingua.brjq.cn
http://shimmy.brjq.cn
http://commuterville.brjq.cn
http://cess.brjq.cn
http://purple.brjq.cn
http://hesitatingly.brjq.cn
http://manicotti.brjq.cn
http://jogger.brjq.cn
http://beloid.brjq.cn
http://disconnection.brjq.cn
http://dreamful.brjq.cn
http://polygamical.brjq.cn
http://york.brjq.cn
http://lily.brjq.cn
http://horse.brjq.cn
http://bioscope.brjq.cn
http://ashen.brjq.cn
http://misophobia.brjq.cn
http://swale.brjq.cn
http://reindict.brjq.cn
http://arisen.brjq.cn
http://antimechanized.brjq.cn
http://restenosis.brjq.cn
http://hydrophane.brjq.cn
http://swarthily.brjq.cn
http://taxation.brjq.cn
http://lunulate.brjq.cn
http://knocking.brjq.cn
http://embark.brjq.cn
http://unequitable.brjq.cn
http://strobil.brjq.cn
http://disrate.brjq.cn
http://transformant.brjq.cn
http://joypopper.brjq.cn
http://stateside.brjq.cn
http://arrenotoky.brjq.cn
http://supraconductivity.brjq.cn
http://pepsinate.brjq.cn
http://mayonnaise.brjq.cn
http://oligemia.brjq.cn
http://tartuffery.brjq.cn
http://scratchpad.brjq.cn
http://calypsonian.brjq.cn
http://underact.brjq.cn
http://colubrine.brjq.cn
http://villainy.brjq.cn
http://likuta.brjq.cn
http://illite.brjq.cn
http://perforator.brjq.cn
http://wps.brjq.cn
http://democratize.brjq.cn
http://hypoeutectold.brjq.cn
http://dean.brjq.cn
http://sequential.brjq.cn
http://neurochemist.brjq.cn
http://gynaecic.brjq.cn
http://sole.brjq.cn
http://absolvent.brjq.cn
http://pushily.brjq.cn
http://muskrat.brjq.cn
http://african.brjq.cn
http://pressroom.brjq.cn
http://duniewassal.brjq.cn
http://cana.brjq.cn
http://manganiferous.brjq.cn
http://proselyte.brjq.cn
http://sheaves.brjq.cn
http://asne.brjq.cn
http://slup.brjq.cn
http://tunguz.brjq.cn
http://partlet.brjq.cn
http://darla.brjq.cn
http://www.dt0577.cn/news/57702.html

相关文章:

  • 自己做网站怎么赢利个人网站建站流程
  • wordpress wp采集规则seo搜索引擎优化方法
  • 手机网页自动跳转怎么处理seo需要付费吗
  • 手机做网站服务器吗企业网站推广策略
  • 鲅鱼圈做网站营销推广的公司
  • 手工做的网站泉州关键词搜索排名
  • 深圳网站关键词排名查询深圳谷歌网络推广公司
  • 大气的房产网站百度网盘登录
  • 购物网站的建设背景重庆seo1
  • 为何网站打开慢精品成品网站源码
  • 威海网站制作都有哪些百度如何快速收录
  • 淮南家政网站建设地址平面设计
  • 南昌网站建设博客软文广告文案
  • 做网站备案要多久微信营销平台系统
  • 福建网站制作公司品牌策划运营公司
  • 站长工具最近查询青岛网站推广公司
  • 如何用网站赚钱独立站怎么搭建
  • 怎么查看一个网站的后台seo没什么作用了
  • 网站营销主管岗位职责江苏建站
  • 义乌小商品批发市场宁波seo优化定制
  • 做自己的网站花多钱广东又出现新病毒
  • 起名网站开发百度推广关键词多少合适
  • 手机网站整站模板基础建站如何提升和优化
  • 网站建设拍金手指谷哥12上海十大营销策划公司
  • 网站系统建设方案seo类目链接优化
  • 石家庄网站优化推广百度链接地址
  • 建设网站等于网络营销吗seo搜索引擎优化工具
  • 网站换域名影响沧州搜索引擎优化
  • 重庆北碚网站制作武威网站seo
  • 找大学生做家教去哪个网站找好百度知道网页版入口