我使用 Bunny (Ruby) 发布 RabbitMQ 消息,如下所示:
x.publish("Message !"+n.to_s, :routing_key => 'mychannel')
Run Code Online (Sandbox Code Playgroud)
并像这样订阅:
ch = conn.create_channel
x = ch.topic('fling',durable: true)
q = ch.queue("")
q.bind(x, :routing_key => 'mychannel')
puts "Waiting for messages."
q.subscribe( :block => true) do |delivery_info, properties, body|
puts " [x] Received #{body}, message properties are #{properties.inspect}"
Run Code Online (Sandbox Code Playgroud)
一旦我启动订阅者,它就会立即接收发送的任何消息。但是,如果我在没有启动订阅者的情况下发送消息,则当我启动订阅者时不会收到消息(无论发送者是否仍在推送消息)。
当没有订阅者在监听时,是否可以返回队列并接收过去发送的消息?
我正在尝试连接到 RabbitMQ 服务器,但总是收到以下错误:
W, [2015-12-08T15:38:01.993251 #37405] WARN -- #<Bunny::Session:0x7fe07b894f78 guest@localhost:5672, vhost=/dev_prod, addresses=[localhost:5672]>: An empty frame was received while opening the connection. In RabbitMQ <= 3.1 this could mean an authentication issue.
Run Code Online (Sandbox Code Playgroud)
和
.../.rvm/gems/ruby-2.1.2/gems/bunny-2.2.0/lib/bunny/session.rb:315:in `rescue in start': Could not establish TCP connection to any of the configured hosts (Bunny::TCPConnectionFailedForAllHosts)
Run Code Online (Sandbox Code Playgroud)
我在 MAC 操作系统上使用 Ruby 2.1.2、RabbitMQ 3.5.6。抱歉,我是 RabbitMQ 的新手,只是尝试使用它,但无法解决问题。请给我一些建议。
使用以下路由密钥将两个队列绑定到主题交换:
队列A,与路由密钥模式匹配*.foo
队列B绑定,绑定路由密钥模式匹配*.bar
我想在此交换中添加第三个队列,它接收既不是foo消息也不是消息的bar消息.如果我绑定此队列与#路由关键,我自然会得到我所需要的所有信息,但包括foo的和bar的,我不想要的.
有没有办法路由邮件修补模式NOT *.fooAND NOT *.bar?
当我使用 Bunny 时,当我使用以下命令打开到包含 50,000 条消息的队列的连接时:
queue = channel.queue('test.queue', :durable => true)
queue.subscribe(:manual_ack => true) do ...
Run Code Online (Sandbox Code Playgroud)
RabbitMQ 立即将所有消息从 移动READY到UNACKED,从而不会在 中留下任何消息READY。
如果我尝试使用相同的代码启动另一个兔子,它现在没有任何可读取的内容READY。
我错过了一些明显的东西吗?