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

有什么网站可以做微信支付宝微博营销策略

有什么网站可以做微信支付宝,微博营销策略,重庆城乡建设委员会的网站,百度wordpress文章目录 生产者消息确认机制概述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://www.yidumall.com/news/11272.html

相关文章:

  • 装饰公司为什么做网站关键词排名优化系统
  • 娄底市住房和城乡建设局网站今天的新闻摘抄
  • 简述jsp网站开发的环境配置过程b站推广怎么买
  • 在线做分析图的网站晨阳seo顾问
  • 南宁网站制作网络公司沈阳网站制作
  • 什么是网站网页主页百度知道官网入口
  • 苏州做网站设计怎么出售友情链接
  • 西安网站建设现状百度网盘app手机版
  • 做效果图比较好的模型网站有哪些百度风云排行榜官网
  • 域名解析 别人网站辽阳网站seo
  • 网站流量查询最准的直通车怎么开才有效果
  • 珠海网站关键词推广网上推
  • 昆山 网站设计郑州有没有厉害的seo顾问
  • 环保h5微网站免费培训机构
  • 政府网站建设规划seo短视频网页入口引流网站
  • 石家庄做网站比较好的公司怎么营销推广
  • 现在还有做静态网站的网络销售怎么做才能有业务
  • 网站建设协议免费网页制作平台
  • 网站建设客户沟通qq引流推广平台
  • 南京百度网站制作网站网络优化外包
  • 电子商务网站运营郑州竞价托管公司哪家好
  • 视频号直播怎么引流网站如何优化推广
  • 创意办公空间设计临沧seo
  • 衡水安徽学校网站建设百度引擎搜索
  • 杭州网站推广优化中国网民博客 seo
  • 优化推广网站推荐铜仁搜狗推广
  • 上海政府网站建设报告关键词优化外包
  • 页面简单的网站seo同行网站
  • 做美女图片网站犯法吗站长工具综合查询官网
  • 搞一个网站需要多少钱深圳网络推广公司