首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当我使用spring-cloud-stream发送rabbitmq消息时,我无法指定发送的RoutingKey

当使用Spring Cloud Stream发送RabbitMQ消息时,无法直接指定发送的RoutingKey。Spring Cloud Stream是一个用于构建消息驱动的微服务的框架,它提供了一种简化的方式来与消息中间件进行交互。

在Spring Cloud Stream中,消息的发送和接收是通过绑定器(Binder)来实现的。绑定器是一个与消息中间件进行交互的适配器,它隐藏了底层消息中间件的细节,使开发者可以专注于业务逻辑的实现。

对于RabbitMQ作为消息中间件,Spring Cloud Stream默认使用了RabbitMQ Binder来实现与RabbitMQ的交互。在RabbitMQ Binder中,消息的路由是通过Exchange和Binding来实现的,而不是通过直接指定RoutingKey。

Exchange是消息的分发中心,它接收生产者发送的消息,并根据一定的规则将消息路由到一个或多个Queue中。Binding则是将Exchange和Queue进行绑定,定义了消息的路由规则。

在Spring Cloud Stream中,可以通过配置来指定消息的路由规则。具体来说,可以在应用程序的配置文件中使用spring.cloud.stream.bindings.<channelName>.destination属性来指定Exchange的名称,而不是直接指定RoutingKey。

例如,假设有一个名为myChannel的消息通道,可以在配置文件中添加以下配置:

代码语言:txt
复制
spring.cloud.stream.bindings.myChannel.destination=myExchange

这样,消息将会发送到名为myExchange的Exchange中,然后根据Exchange和Binding的配置进行路由。

需要注意的是,具体的RoutingKey的生成和使用是由消息中间件(如RabbitMQ)来决定的,而不是由Spring Cloud Stream来控制。如果需要更精细地控制RoutingKey,可以直接使用RabbitMQ的原生API进行操作。

总结起来,当使用Spring Cloud Stream发送RabbitMQ消息时,无法直接指定发送的RoutingKey,而是通过配置Exchange和Binding来实现消息的路由。具体的RoutingKey的生成和使用是由RabbitMQ来决定的。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Spring Cloud Bus 向指定微服务发送消息

指定微服务发送消息要向指定微服务发送消息,需要使用 Spring Cloud Bus 提供 DestinationProvider 接口,该接口可以返回目标微服务名称。...在消息广播,Spring Cloud Bus 会根据目标微服务名称将消息发送指定微服务中。...然后,在需要发送消息微服务中,可以使用 Spring Cloud Bus 提供 MessageSender 接口来发送消息,例如:@RestControllerpublic class MyController...sendMessage 方法会使用 MessageSender 接口发送消息,该方法接受一个字符串类型参数 message,表示要发送消息。...在实际应用中,我们可以将消息封装成一个对象,然后将对象作为参数传递给 sendMessage 方法。

79131

全网最全RabbitMQ总结,别再说你不会RabbitMQ

当初RabbitMQ时候,第一间就上GitHub找相应教程,但是令我很失望是没有找到,Spring,Mybatis之类教程很多,而RabbitMQ教程几乎找不到,看最多就是朱小厮大佬博客...图示主要流程如下 生产者发送消息时候指定RoutingKey,然后消息发送到Exchange Exchange根据一些列规则将消息路由到指定队列中 消费者从队列中消费消息 整个流程主要就4个参与者...如果是内置交换器,客户端无法发送消息到这个交换器中,只能通过交换器路由到交换器这种方式 argument 其他一些结构化参数 我们最常使用就是type属性,下面就详细解释type属性 ?...类似,也是将消息发送RoutingKey和BindingKey相匹配队列中,只不过可以模糊匹配 headers 性能差,基本不会使用 ?..., 详细使用可以参考github代码 当我们想做消息持久化时,最好同时设置队列和消息持久化,因为只设置队列持久化,重启之后消息会丢失。

2.5K22

消息队列——RabbitMQ基本使用及高级特性

上图就是RabbitMQ默认会创建交换机,当我们未创建交换机发送消息,默认都是发送到AMQP default上。...getBytes()); 上述代码演示了生产者如何将消息发送指定routingKey直连类型交换机上,我们可以发现当使用默认交换机时,默认是使用队列名字作为routingKey(详细代码)。...掌握以上所讲,我们就能熟练使用MQ发送接收消息,但仅靠这些肯定无法应付复杂业务场景,因此RabbitMQ也提供了丰富特性供我们选择。 三、高级特性 1....; } 因为每个消费者都设定了routingKey,所以不同消息发送到对应消费者上去(需要注意与之绑定死信队列也需要指定相同routingKey才能接收到死亡消息)。...RabbitMQ也提供了两种方式: mandatory参数和ReturnListener监听器:首先可以给Channel添加一个监听器,并在发送消息设置mandatory参数为true,这样当消息无法正确路由

75420

消息中间件-RabbitMQ

,Exchange会将消息发送完全匹配ROUTING_KEYQueue,缺陷是无法实现多生产者对一个消费者 1.生产者一个Exchange对应一个routingKey绑定,也可以声明队列并绑定,然后向指定队列发送消息...这个时候就需要定制了一对一场景了,那就在生产消息使用直连交换机根据routingKey发送指定消费者....绑定,如果没有定义队列,那消费者自己声明一个随机Queue用于接收消费消息, 3.消费者routingKey模糊匹配,生产者发送消息routingKey定义以sms.开头, * 号只能匹配routingKey...1.生产端 2.存储端 3.消费端 1.消息生产端 我们在给RabbitMQ发送消息,如何去保证消息一定到达呢,我们可以使用RabbitMQ提供了2种生产端消息确认机制 模式 描述 实现方式 Confirm...我们生产端给RabbitMQ发送消息成功后,如果RabbitMQ宕机了,会导致RabbitMQ消息丢失,如何解决消息丢失问题,针对RabbitMQ消息丢失,我们可以在生产者中使用 1.持久化消息 2

55710

MQ选型之RabbitMQ

在Exchange Type与binding key固定情况下(在正常使用时一般这些内容都是固定配置好),我们生产者就可以在发送消息给Exchange,通过指定routing key来决定消息流向哪里...Binding key 在绑定(Binding)Exchange与Queue同时,一般会指定一个binding key;消费者将消息发送给Exchange,一般会指定一个routing key;当binding...在绑定Queue与Exchange指定一组键值对;当消息发送到ExchangeRabbitMQ会取到该消息headers(也是一个键值对形式),对比其中键值对是否完全匹配Queue与Exchange...RabbitMQ 中实现RPC 机制是: 客户端发送请求(消息,在消息属性(MessageProperties ,在AMQP 协议中定义了14中properties ,这些属性会随着消息一起发送...)中设置两个值replyTo (一个Queue 名称,用于告诉服务器处理完成后将通知消息发送到这个Queue 中)和correlationId (此次请求标识号,服务器处理完成后需要将此属性返还,

58820

面试官:说说RabbitMQ消费端限流、TTL、死信队列

为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据...TTL TTL是Time To Live缩写,也就是生存时间。RabbitMQ支持消息过期时间,在消息发送可以进行指定。...RabbitMQ允许您为消息和队列设置TTL(生存时间)。 这可以使用可选队列参数或策略来完成(建议使用后一个选项)。 可以对单个队列,一组队列强制执行消息TTL,也可以为单个消息应用消息TTL。...——摘自 RabbitMQ 官方文档 1.消息 TTL 我们在生产端发送消息时候可以在 properties 中指定 expiration属性来对消息过期时间进行设置,单位为毫秒(ms)。...当这个队列中有死信RabbitMQ 就会自动将这个消息重新发布到设置 Exchange 上去,进而被路由到另一个队列。可以监听这个队列中消息做相应处理。

58020

springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

这次分享是 springboot + rabbitmq 如何实现消息确认机制,以及在实际开发中一点踩坑经验,其实整体内容比较简单,有时候事情就是这么神奇,越是简单东西就越容易出错。...可以看到使用RabbitMQ 以后,我们业务链路明显变长了,虽然做到了系统间解耦,但可能造成消息丢失场景也增加了。...手动消息确认模式下,我们可以对指定deliveryTag消息进行ack、nack、reject等操作。...举个栗子: 假设发送三条消息deliveryTag分别是5、6、7,可它们都没有被确认,当我发第四条消息此时deliveryTag为8,multiple设置为 true,会将5、6、7、8消息全部进行确认...导致消息队列处理出现阻塞,导致正常消息无法运行。

41320

Springboot + RabbitMQ 用了消息确认机制,感觉掉坑里了!

在这里插入图片描述 这次分享是 springboot + rabbitmq 如何实现消息确认机制,以及在实际开发中一点踩坑经验,其实整体内容比较简单,有时候事情就是这么神奇,越是简单东西就越容易出错...可以看到使用RabbitMQ 以后,我们业务链路明显变长了,虽然做到了系统间解耦,但可能造成消息丢失场景也增加了。...手动消息确认模式下,我们可以对指定deliveryTag消息进行ack、nack、reject等操作。...举个栗子: 假设发送三条消息deliveryTag分别是5、6、7,可它们都没有被确认,当我发第四条消息此时deliveryTag为8,multiple设置为 true,会将5、6、7、8消息全部进行确认...导致消息队列处理出现阻塞,导致正常消息无法运行。

1.9K41

RabbitMQ 消费端限流、TTL、死信队列

为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据...TTL TTL是Time To Live缩写,也就是生存时间。RabbitMQ支持消息过期时间,在消息发送可以进行指定。...RabbitMQ允许您为消息和队列设置TTL(生存时间)。 这可以使用可选队列参数或策略来完成(建议使用后一个选项)。 可以对单个队列,一组队列强制执行消息TTL,也可以为单个消息应用消息TTL。...——摘自 RabbitMQ 官方文档 1.消息 TTL 我们在生产端发送消息时候可以在 properties 中指定 expiration属性来对消息过期时间进行设置,单位为毫秒(ms)。...当这个队列中有死信RabbitMQ 就会自动将这个消息重新发布到设置 Exchange 上去,进而被路由到另一个队列。可以监听这个队列中消息做相应处理。

92610

RabbitMQ 消费端限流、TTL、死信队列

为什么要对消费端限流 假设一个场景,首先,我们 Rabbitmq 服务器积压了有上万条未处理消息,我们随便打开一个消费者客户端,会出现这样情况: 巨量消息瞬间全部推送过来,但是我们单个客户端无法同时处理这么多数据...TTL TTL是Time To Live缩写,也就是生存时间。RabbitMQ支持消息过期时间,在消息发送可以进行指定。...RabbitMQ允许您为消息和队列设置TTL(生存时间)。 这可以使用可选队列参数或策略来完成(建议使用后一个选项)。...——摘自 RabbitMQ 官方文档 1.消息 TTL 我们在生产端发送消息时候可以在 properties 中指定 expiration属性来对消息过期时间进行设置,单位为毫秒(ms)。...当这个队列中有死信RabbitMQ 就会自动将这个消息重新发布到设置 Exchange 上去,进而被路由到另一个队列。可以监听这个队列中消息做相应处理。

57620

缓存架构之史上讲最明白RabbitMQ可靠消息传输实战演练

,易知,默认是持久化 3)消息持久化 当我使用RabbitTemplate调用了 convertAndSend(String exchange, String routingKey, final...)实现 但是使用事务机制实现会严重降低RabbitMQ消息吞吐量,我们采用一种轻量级方案——生产者消息确认机制 什么是消息确认机制?...当消息在一个队列中变成死信(dead message),通过这个交换机将死信发送到死信队列中(指定好相关参数,rabbitmq会自动发送)。 什么是死信呢?什么样消息会变成死信呢?...消息TTL过期 队列达到最大长度(队列满了,无法再添加数据到mq中) 应用场景分析: 在定义业务队列时候,可以考虑指定一个死信交换机,并绑定一个死信队列,当消息变成死信,该消息就会被发送到该死信队列上...定义业务(普通)队列时候指定参数: x-dead-letter-exchange: 用来设置死信后发送交换机 x-dead-letter-routing-key:用来设置死信routingKey

70720

Rabbit-使用

何为消息中间件?      消息中间件是在消息传输过程中保存消息容器。消息中间件在将消息从它源中传递到它目标充当中间人作用。队列主要目的是提供路由并保证消息传递。...消息中间件主要用于组件之间解耦,消息发送者无需知道消息使用存在,反之亦然。 AMQP主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。...(5)其他 无法登陆管理控制台,通常就是普通生产者和消费者。 在这给每个角色创建一个用户 二、Virtual Host 像mysql拥有数据库概念并且可以指定用户对库和表等操作权限。...* @param properties 属性信息(生产者发送指定) * @param body 消息内容 * @throws IOException...key,当发送消息到交换机后,交换机会根据routing key将消息发送到对应队列 生产者发送消息指定routing key,比如A,交换机就会把消息发送到A队列。

63810

大话RabbitMQ 基础入门

----------写在前面---------- 近些年微服务越来越火,让也忍不住想去一窥微服务究竟,讲到微服务,就离不开分布式,而分布式,也离不开消息队列,在消息队列中,RabbitMQ可以说是比较具有代表性一款...-------正文------ 基本概念 下面是在.Net中使用RabbitMQ要明白一些名词概念。 ? 综上所诉,他们之间关系可以用下面的 丑图 表示。 ?...所以,发送消息时候routingKey就是国家规定那批物质分配规则。...我们可以把Exchange理解为分配这批物质政府,现在国家规定了宏观分配方向(发送消息routingKey),每个家庭也有了家庭情况标签(绑定ExchangeroutingKey),但是这个物资具体怎么分...(Customer单词拼写错了,图片修改不方便,就不改了,大家将就一下) Direct Direct严格匹配,只有队列绑定RoutingKey与生产者发送消息指定RoutingKey完全相同,

49420

RabbitMQ 入门学习

* routingKey :路由key,交换机根据路由key来将消息转发到指定队列,如果使用默认交换机routingKey设置为队列名称 * props :消息包含属性...* routingKey :路由key,交换机根据路由key来将消息转发到指定队列,如果使用默认交换机routingKey设置为队列名称 * props :消息包含属性...*指定队列,与指定交换机关联起来 *指定交换机 *第三个参数 routingKey, 由于是fanout交换机, 这里忽略 routingKey; 但它是必须参数所以必须要加...消费者 再绑定队列和交换器制定一组键值对 发送消息时候,提供:发送消息 和 要匹配map RabbitMQ会获取到该消息headers, 对比其中键值对是否完全匹配队列和交换器绑定时指定键值对...缩写,也就是生存时间 RabbitMQ支持消息过期时间,在消息发送可以进行指定, 消息存在时间… RabbitMQ支持队列过期时间,从消息入队列开始计算,只要超过了队列超时时间配置,那么消息自动清除

9710

缓存架构之史上讲最明白RabbitMQ可靠消息传输实战演练

3)消息持久化 当我使用RabbitTemplate调用了 convertAndSend(String exchange, String routingKey, final Object object...)实现 但是使用事务机制实现会严重降低RabbitMQ消息吞吐量,我们采用一种轻量级方案——生产者消息确认机制 什么是消息确认机制?...当消息在一个队列中变成死信(dead message),通过这个交换机将死信发送到死信队列中(指定好相关参数,rabbitmq会自动发送)。 什么是死信呢?什么样消息会变成死信呢?...消息TTL过期 队列达到最大长度(队列满了,无法再添加数据到mq中) 应用场景分析: 在定义业务队列时候,可以考虑指定一个死信交换机,并绑定一个死信队列,当消息变成死信,该消息就会被发送到该死信队列上...定义业务(普通)队列时候指定参数: x-dead-letter-exchange: 用来设置死信后发送交换机 x-dead-letter-routing-key:用来设置死信routingKey

55040

springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

可以看到使用RabbitMQ 以后,我们业务链路明显变长了,虽然做到了系统间解耦,但可能造成消息丢失场景也增加了。...例如: 消息生产者 - > rabbitmq服务器(消息发送失败) rabbitmq服务器自身故障导致消息丢失 消息消费者 - > rabbitmq服务(消费消息失败) [在这里插入图片描述] 所以说能不使用中间件就尽量不要用...手动消息确认模式下,我们可以对指定deliveryTag消息进行ack、nack、reject等操作。...举个栗子: 假设发送三条消息deliveryTag分别是5、6、7,可它们都没有被确认,当我发第四条消息此时deliveryTag为8,multiple设置为 true,会将5、6、7、8消息全部进行确认...导致消息队列处理出现阻塞,导致正常消息无法运行。

66710

RabbitMq入门以及使用教程

在Exchange Type与binding key固定情况下(在正常使用时一般这些内容都是固定配置好),我们生产者就可以在发送消息给Exchange,通过指定routing key来决定消息流向哪里...9、Binding key 在绑定(Binding)Exchange与Queue同时,一般会指定一个binding key;消费者将消息发送给Exchange,一般会指定一个routing key;...在绑定Queue与Exchange指定一组键值对;当消息发送到ExchangeRabbitMQ会取到该消息headers(也是一个键值对形式),对比其中键值对是否完全匹配Queue与Exchange...RabbitMQ中实现RPC机制是: 客户端发送请求(消息,在消息属性(MessageProperties,在AMQP协议中定义了14中properties,这些属性会随着消息一起发送)中设置两个值...replyTo(一个Queue名称,用于告诉服务器处理完成后将通知消息发送到这个Queue中)和correlationId(此次请求标识号,服务器处理完成后需要将此属性返还,客户端将根据这个id了解哪条请求被成功执行了或执行失败

55720

消息队列助你成为高薪 Node.js 工程师

想很多小伙伴也会有疑问,说明下: 疑问1 前面提到过交换机这个名词,生产者发消息时候必须要指定一个 exchange,若不指定 exchange(为空)会默认指向 AMQP default 交换机...通过代码实现消息队列释放(删除) 消息队列交换机讲解 先记住一句话 生产者发消息时候必须指定一个 exchange,否则消息无法直接到达消息队列,Exchange将消息路由到一个或多个Queue中(或者丢弃...topic 生产者指定 RoutingKey 消息根据消费端指定队列通过模糊匹配方式进行相应转发,两种通配符模式: #:可匹配一个或多个关键字 *:只能匹配一个关键字 ?...觉得这个配置是有必要打开,消费者完成消息队列中任务,消费者可能中途失败或者挂掉,一旦 RabbitMQ 发送一个消息给消费者然后便迅速将该消息消息队列内存中移除,这种情况下,消费者对应工作进程失败或者挂掉后...可以将prefetch count项值配置为1,这将会指示 RabbitMQ 在同一间不要发送超过一条消息给每个消费者。换句话说,直到消息被处理和应答之前都不会发送给该消费者任何消息

78220

消息队列助你成为高薪 Node.js 工程师

想很多小伙伴也会有疑问,说明下: 疑问1 前面提到过交换机这个名词,生产者发消息时候必须要指定一个 exchange,若不指定 exchange(为空)会默认指向 AMQP default 交换机...通过代码实现消息队列释放(删除) 消息队列交换机讲解 先记住一句话 生产者发消息时候必须指定一个 exchange,否则消息无法直接到达消息队列,Exchange将消息路由到一个或多个Queue中(或者丢弃...topic 生产者指定 RoutingKey 消息根据消费端指定队列通过模糊匹配方式进行相应转发,两种通配符模式: #:可匹配一个或多个关键字 *:只能匹配一个关键字 ?...觉得这个配置是有必要打开,消费者完成消息队列中任务,消费者可能中途失败或者挂掉,一旦 RabbitMQ 发送一个消息给消费者然后便迅速将该消息消息队列内存中移除,这种情况下,消费者对应工作进程失败或者挂掉后...可以将prefetch count项值配置为1,这将会指示 RabbitMQ 在同一间不要发送超过一条消息给每个消费者。换句话说,直到消息被处理和应答之前都不会发送给该消费者任何消息

1.2K81

硬卷消息中间件系列(四):RabbitMQ 管理界面详解

无法查看节点相关信息(上图红框标识部分)。 普通管理者(management) 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。...Prefetch #Prefetch 表示每个消费者最大能承受未确认消息数目,简单来说就是用来指定一个消费者一次可以从 RabbitMQ 中获取多少条消息并缓存在消费者中,一旦消费者缓冲区满了,...当Queue中 autoDelete 属性被设置为true,那么,当所有消息接收者宕机或者关闭连接后,消息队列则会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收最新消息,而宕机期间消息则会丢失...当Quere中 autoDelete 属性被设置为false,那么,当消息接收者宕机,关闭后,消息队列不会删除,消息发送者一直发送消息,当消息接收者重新启动恢复正常后,会接收包括宕机期间消息。...新建direct交换机: 新建普通队列 交换机和队列建立绑定关系 点击交换机进行绑定: 点击交换机发送消息:这里发送了两条 发动成功: 点击队列消息; Fanout FanoutExchange

1.4K30
领券