我正在尝试编写一个应用程序,测试将N个交换绑定到内存、IO等相同队列的效果。
所有测试都使用“主题”交换类型。我遇到的问题是,当我使用多个exchange进行测试时,我没有收到我发布回的所有消息。但是,当我使用1 exchange时,我会收到所有消息。
你知道为什么会这样吗?
谢谢
编辑:
我有一个队列,它使用相同的绑定键绑定到两个“主题”交换:
我将向每个exchange发布两条消息,如下所示:
>
Exchange 0
Exchange 1
我有一个消费者正在监听队列,但只收到以下消息:
有什么想法吗?
我不太确定您试图通过测试来证明什么,但请记住IO和内存将是一个与队列总体大小相关的函数,而不是一个队列绑定了多少个交换。您可能会发现这篇关于使用RabbitMQ实现性能和可伸缩性的路由拓扑的博文非常有用。
无论如何,问题似乎出在您的绑定上,我可以通过使用RabbitMQ的Web管理门户来重现问题,而无需编写一行代码。
请查看此处有关主题交换的部分,但重要部分包括:
发送到主题交换的消息不能有任意routing_key——它必须是一个由点分隔的单词列表。单词可以是任何东西,但通常它们指定与消息相关的一些特征。一些有效的路由键示例:“stock.usd.nyse”、“nyse.vmw”、“quick.orange.rabbit”。路由键中可以有任意数量的单词,最多不超过255个字节。
绑定密钥的格式也必须相同。主题交换背后的逻辑类似于直接交换-使用特定路由密钥发送的消息将被传递到使用匹配绑定密钥绑定的所有队列。但是,绑定密钥有两种重要的特殊情况:
* (star) can substitute for exactly one word.
# (hash) can substitute for zero or more words.
这意味着,当您发布消息时,您应该执行系统操作。错误和系统。日志
但是,我认为您的交换绑定实际上有问题。如果您尝试使用RabbitMQ Web管理使用这些路由键发布,您会注意到您的消息实际上根本没有被路由到队列,这可以解释为什么您的消费者会收到它们...我会玩弄绑定,并使用RabbitMQ Web管理来尝试您在运行更大测试之前尝试实现的路由行为。
我们有一个队列和交换集群来支持消息。 null 我们每个队列都有一个交换,以便在重试超时期间后将重试的消息发送回特定的队列。 在这个场景中,我们有3个交换(“foo-exchange”、“foo-exchange-dead”、“baz-exchange-retry(每个队列1个fanout exchange)”和3个队列(“baz-queue”、“baz-queue-delay”、“baz-que
英文原文:http://emberjs.com/guides/testing/testing-user-interaction/ 几乎所有的测试都有访问路由的一种固有模式,就是与页面进行交互(通过助手),然后检测期待的改变是否在DOM中发生。 例如: 1 2 3 4 5 6 test('root lists first page of posts', function(){ visit('/
我已经用Rabbitmq绑定器设置了一个Spring Cloud stream。我想用Spring Cloud stream做性能测试。有什么方法可以用它做性能测试吗?
我通过实现MessageListener接口并设置SimpleMessageListenerContainer编写了RabbitMQ消费者。当我手动测试它时,它运行良好。现在我想编写一个联调: 创建消息 将消息推送到我的RabbitMQ服务器 等待消息被我的MessageListener实现消耗 测试做了一些断言,一旦一切都完成了 然而,由于我的MessageListener是在一个单独的线程中运
我的RabbitMQ上有一个主题交换。发送消息时出错。 接收部分: 发送部分: 第行出错:< code > channel . EXCHANGE declare(EXCHANGE _ NAME," topic ");异常:无法使用不同的类型、持久性、内部或自动删除值、class-id=40、method-id=10在vhost“/”中重新声明exchange“EX _ TEST” 如何解决这个问题
我一直在尝试使用RabbitMQ,但遇到了以下问题(与此非常类似:RabbitMQ中的主题交换与直接交换)。 我需要密集地广播大约800种类型的消息(因此每种消息类型都会有很多消费者),我想知道以下哪种方法更好: > 创建一个直接交换,在该交换中,消息将使用路由密钥(消息类型名称)发送,每个消费者都将通过绑定了相应路由密钥的临时队列连接到该交换。(因为没有像“key1.key2.*”这样复杂的路由