关于rabbitmq的两个问题[说法/持久化]

65535 发布于 2014/11/28 00:27
阅读 3K+
收藏 2
才接触rabbitmq不久,有一些疑问恳请大家帮忙看一下,不甚感激。

1、java client 给出的toturials one中有一段代码:


这里
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

中 QUEUE_NAME应该不是真正意义上的QUEUE吧 ,我认为应该是rabbitmq默认的exchange对应的名为QUEUE_NAME的一个routingKey吧,因为是rabbitmq默认的exchange的纷发模式是direct,所以就感觉是直接给相应的queue一样,再翻看对应的api中该方法是这样的:

basicPublish(java.lang.String exchange, java.lang.String routingKey, AMQP.BasicProperties props, byte[] body)

不知道我理解的有没有问题。

二楼指出生成了相应的queue,是这样的。但是basicPublish的方法确实使用的routingKey的,没有明确提及queue的,这怎么理解呢。

现在的理解好象是:在没有指定exchange的时候,指定的rountingKey就会明确生成一个名字相同queue。



2、 关于 producer - exchange - queue - consumer 模式到底怎么持久化消息啊?

      难道producer在publish消息的时候要有相应的queue存在,因为消息只存储在queue中。那么,倘若这样的话,我怎么知道有哪些consumer有哪些queue呢?我在stackoverflow上找到这么一段: http://stackoverflow.com/questions/6148381/rabbitmq-persistent-message-with-topic-exchange/6155733#6155733

他的意思是必须要现有一个queue但是只是执行的方式不同罢了。但现在问题来了,正如该答案下面的提问一样:

我怎么知道有哪些queue,我怎么知道exchange的纷发规则呢?对于老旧的数据怎么处理呢?

我想问一下大家的想法,看看大家平时是怎么处理的。
加载中
0
pior
pior
不是的吧`,QUEUE是要指定NAME的.起码consumer应该要知道自己是从哪个QUEUE里取出数据来.

productor有可能在有exchange的情况下不知道数据到底是发到哪个QUEUE里了`

QUEUENAME在服务上是能看到的`
65535
65535
你这么一说,我倒是想起来了,是这样的,谢谢。 但是basicPublish的方法确实使用的routingKey的,没有明确提及queue的,这怎么理解呢。
0
千斤难买春秋醉
千斤难买春秋醉

你说的对,你理解的也对,第二个参数确实是routingkey

那个例子是exchange是direct模式,然后routingkey和queue_name相同的情况下的。

exchange还有组播方式和topic正则表达式方式的。

至于你问的“我怎么知道有哪些queue,我怎么知道exchange的纷发规则呢

因为那些queue和exchange 以及规则 都是你自己定义的,你怎么会不知道。

一般是在那个页面上配置好queue和exchange和binding规则,代码里面直接用。

千斤难买春秋醉
千斤难买春秋醉
回复 @黑白电视机 : exchange,queue,binding,都是事先定死的。。。只有那几个queue,如果你没在代码里声明的话。但一个queue可以有好多个consumer
65535
65535
然后关于第二问的说法,你说我应该知道规则的意思是说“ 我在publish之前真的要先用consumer启用queue是吧 ” 那倘若我就是一个类似公共publish接口什么的,会有一些后来的consumer产生queue陆陆续续的进来,那我不是不知道吗?还是进来的只能是符合规则的queue,或者我重启publish服务? 谢谢。
65535
65535
在没有指定exchange的时候,指定的rountingKey就会明确生成一个queue是吧。
0
pior
pior
在Publish中没有指定exchange的时候,routeingkey就是QUEUE,

有exchange的时候,就要看routingkey和exchange的bind关系,来确定会放到哪个QUEUE中.
65535
65535
如果真像你说的那样的话,那我也明白了,谢谢。
0
小楼听雨中
小楼听雨中
exchange为"",就是默认的那个exchange
0
小楼听雨中
小楼听雨中
amqp这种设计模式,就是为了让生产者和消费者解耦,不让生产者知道消费者有哪些,queue有哪些。这些都是在可以动态扩展的,但一般都可以现在控制台配置好,在控制台上看下就知道有哪些消费者和queue了
返回顶部
顶部