首页
学习
活动
专区
圈层
工具
发布

14-RabbitMQ高级特性-Return返回消息

Return返回消息 Return消息机制 Return Listener 用于处理一些不可路由的消息 我们的消息生产者,通过指定一个Exchange和RouteKey, 把消息送达到某一个队列中去,然后我们的消费者监听队列...,进行消费处理操作 但是在某些情况下, 我们在发送消息的时候, 当前的Exchange不存在, 或者指定的路由key, 路由不到, 这个时候我们就需要监听这些不可达的消息, 就需要使用Return Listener...在基础API中有一个关键的配置项 Mandatory; 如果为true, 则监听器会接收到路由不可达的消息, 然后进行后续处理, 如果为false, 那么broker端会自动删除该消息 Return消息机制流程...Return消息机制代码实现 消费者 package com.dance.redis.mq.rabbit.returnlistener; import com.dance.redis.mq.rabbit.RabbitMQHelper...exchangeName, routingKey3, mandatory, null, msg.getBytes()); } } 测试 启动消费者 启动生产者 可以看到, 没有匹配到路由键的消息会被监听回来

46330
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    云原生中间件RocketMQ-生产者消息返回状态,延迟消息,自定义消息发送规则,netty框架部分代码分析

    文章目录 生产者消息返回状态 FLUSH_DISK_TIMEOUT FLUSH_SLAVE_TIMEOUT SLAVE_NOT_AVAILABLE SEND_OK 延迟消息 自定义消息发送规则 MessageQueueSelector...Netty底层框架解析 NettyRemotingServer start() 方法 NettyRemotingClient 生产者消息返回状态 FLUSH_DISK_TIMEOUT 如果设置了...如果收到了 FLUSH_DISK_TIMEOUT, FLUSH_SLAVE_TIMEOUT,意味着消息会丢失,有2个选择,一是无所谓,适用于消息不需要保证不丢失的场景,二是重发,但可能产生消息重复,这就需要...延迟消息 延迟消息:消息发到Broker后,要特定的时间才会被Consumer消费。...,并且返回相应的处理结果。

    81620

    消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务

    有些消息队列在长时间没收到发送确认响应后,会自动重试,如果重试再失败,就会以返回值或者异常的方式告知用户 在编写发送消息代码时,需要注意,正确处理返回值或者捕获异常,就可以保证这个阶段的消息不会丢失 以...检查这条消息是否有被消费过,如果没有消费过,才更新数据,然后将消费状态置为已消费 但在分布式系统中,这个方法非常难以实现。...这个过程中有一个需要用到消息队列的步骤,订单系统创建订单后,发消息给购物车系统,将已下单的商品从购物车中删除。...因为从购物车删除已下单商品这个步骤,并不是用户下单支付这个主要流程中必需的步骤,使用消息队里来异步清理购物车是更加合理的设计 ?...ID,在订单库中查询这个订单是否存在即可,如果订单存在则返回成功,否则返回失败。

    2.2K20

    消息可靠性、重复消息、消息积压、利用消息实现分布式事务

    有些消息队列在长时间没收到发送确认响应后,会自动重试,如果重试再失败,就会以返回值或者异常的方式告知用户 在编写发送消息代码时,需要注意,正确处理返回值或者捕获异常,就可以保证这个阶段的消息不会丢失 以...检查这条消息是否有被消费过,如果没有消费过,才更新数据,然后将消费状态置为已消费 但在分布式系统中,这个方法非常难以实现。...这个过程中有一个需要用到消息队列的步骤,订单系统创建订单后,发消息给购物车系统,将已下单的商品从购物车中删除。...因为从购物车删除已下单商品这个步骤,并不是用户下单支付这个主要流程中必需的步骤,使用消息队里来异步清理购物车是更加合理的设计 ?...ID,在订单库中查询这个订单是否存在即可,如果订单存在则返回成功,否则返回失败。

    1.3K20

    消息中间件—RocketMQ消息消费(三)(消息消费重试)

    一般在实际应用中,移入至死信队列的消息,需要人工干预处理; 2.1 Consumer端回发消息至Broker端 在业务工程中的Consumer端(Push消费模式下),如果消息能够正常消费需要在注册的消息监听回调方法中返回...CONSUME_SUCCESS的消费状态,否则因为各类异常消费失败则返回RECONSUME_LATER的消费状态。...,那么则会抛出异常并且返回这里的RECONSUME_LATER状态。...从消息消费任务ConsumeRequest的run()方法中会执行业务工程中注册的消息监听回调方法,并在processConsumeResult方法中根据业务工程返回的状态(CONSUME_SUCCESS...根据回发过来的消息偏移量尝试从commitlog日志文件中查询消息内容,若不存在则返回异常错误。

    3.9K40

    RocketMQ源码详解:事务消息、批量消息、延迟消息

    事务结果报告(可能是 commit 或 rollback)public static final int END_TRANSACTION = 37; 完成处理后,该方法会将事务的发送结果和本地事务的执行结构都返回给上层...); if (sendResult.getCode() == ResponseCode.SUCCESS) { /* * 找到半消息,进行删除...* 删除并不是物理上的删除,因为物理上的删除的代价十分的高昂,而是写入一条具有相同事务id的消息到 op Topic */ this.brokerController.getTransactionalMessageService...,来标记可以被移除的 half 消息(op 消息的存在代表对应事务的结束) /** * 读取op消息,解析op消息,填充removeMap * * @param removeMap 要删除的半消息,key...if (removeMap.containsKey(i)) /* 如果该 half 消息存在对应的 op 消息,说明已经被处理了(commit/rollback) */ { // 取出放入到已处理偏移量队列

    1.3K20

    微信公众号消息接入(普通消息+模板消息)

    (测试号不能做支付功能) 一、公众号普通消息 1、实现目标   1、“硅谷课堂”公众号实现根据关键字搜索相关课程,如:输入“java”,可返回java相关的一个课程;   2、“硅谷课堂”公众号点击菜单...“关于我们”,返回关于我们的介绍   3、关注或取消关注等 2、消息接入 参考文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information...若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。...,我们就进行 XML 解析,提取出来我们需要的信息,去做相关的查询操作,再将查到的结果返回给微信服务器。   ...(1)点击个人 -> 关于我们,返回关于我们的介绍 (2)在公众号输入关键字,返回搜索的课程信息 二、公众号模板消息 1、实现目标   购买课程支付成功微信推送消息 2、模板消息实现   接口文档

    3.7K30

    消息队列(1)--如何避免丢消息,积压消息

    注意,队列里的消息并不是消费掉就没有了,这里的“消费”,只是去队列里面读了消息,并没有删除,消费完这条消息还是在队列里面。多个消费组在消费同一个主题时,消费组之间是互不影响的。...,再给客户端返回ACK消费阶段:不要在收到消息后就立即发送消费确认,而是应该在执行完所有消费业务逻辑之后,再发送消费确认。...如果 Broker 没有收到消费确认响应,下次拉消息的时候还会返回同一条消息,确保消息不会在网络传输过程中丢失,也不会因为客户端在执行消费逻辑中出错导致丢失。4.怎么保证消费的幂等性?...+状态设置为唯一索引,利用局部唯一特性,只针对当前业务如果该条消息查询成功,并且是消费成功了,则直接返回成功,而不是将其置为消费失败。...3.利用数据库的唯一约束是最后一道保证幂等的保证,同样,如果触发唯一约束,返回处理成功,ACK成功4.先将消息标记记录,消费时候进行标记检查全局唯一递增id标记消息,到消费者,需要先进行检查然后进行更新

    83911

    kafka删除topic消息的四种方式

    方法二:设置删除策略(简单粗暴,如果这个消息有程序还在消费者,此时KAFKA就game over) 1.kafka启动之前,在server.properties配置 #日志清理策略选择有:delete和...删除操作总是先删除最旧的日志 # 消息在Kafka中保存的时间,168小时之前的1og, 可以被删除掉,根据policy处理数据。..., logcleaner线程将检查一次,看是否符合上述保留策略的消息可以被删除 log.retention.check.interval.ms=1000 方法三:手动删除法(不推荐)(简单粗暴,如果这个消息有程序还在消费者...192.168.27.111:9092"); AdminClient kafkaAdminClient = KafkaAdminClient.create(properties); // 2.从数据库获取需要删除的消息...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    13.4K20

    Windows窗口消息和消息队列

    当系统收到用户键盘和鼠标的输入时,键盘鼠标的驱动程序就会产生一个消息,并将消息投递到系统消息队列中,系统每一次从系统消息队列中检查一个消息,确定接收消息的目标线程,然后将消息从系统消息队列中删除,并把消息投递到线程的登记消息队列中...对于发送给本线程的消息(hWnd是本线程的窗口句柄),则SendMessage函数直接调用相应的窗口的回调函数,让后将回调函数的返回作为SendMessage函数的返回;而对于将消息发送给别的线程的窗口...这个函数的返回值不是消息的返回值而是判断函数调用正确与否的返回值。...当处理消息的线程从它的窗口过程返回时,它返回的任何值都被忽略。这里的问题是, ReplyMessage必须在接收消息的窗口过程中调用,而不是由调用某个SendXXX函数的线程调用。...如果你在处理线程间的消息发送时调用了ReplyMessage,则它返回TRUE ,如果你在处理线程内的消息发送时调用ReplyMessage,它返回FALSE 6.在处理一个消息时,确认此消息时由本线程发送的还是由其他线程发送而来的

    2.7K50
    领券