使用虚拟主题时,制作人应该发送到常规主题还是虚拟主题?

时间:2018-11-14 13:53:27

标签: activemq

现在,我们发布到常规主题,并能够使用虚拟主题中的消息。是合法的方式吗?

不幸的是,从docs尚不清楚此方法的正确性。

但是,我们注意到一些odd behaviour

如果还可以,那么我们现在就想使用它。否则,我们需要在所有队列中更改主题名称,以确保在没有待处理消息之前。

1 个答案:

答案 0 :(得分:0)

好的,我在Active MQ in Action这本书中找到了答案:

  

需要一些命名约定才能允许虚拟主题   正确操作。首先,确定主题将被视为   虚拟主题,主题名称应始终遵循以下模式   pub struct Template { encoder: Box<Encoder> } impl Template { fn new(encoder: Box<Encoder>) -> Template { Template { encoder } } fn encoder(&self) -> &Box<Encoder> { &self.encoder } } pub trait Encoder { fn isEncoder(&self) -> bool { true } } pub struct FixedEncoder { length: usize } impl FixedEncoder { pub fn new(length: usize) -> FixedEncoder { FixedEncoder { length } } pub fn length(&self) -> usize { self.length } } impl Encoder for FixedEncoder {} fn main() { let fixed_encoder = FixedEncoder::new(1); let template = Template::new(Box::new(fixed_encoder)); assert_eq!(template.encoder().isEncoder(), true); // works assert_eq!(&template.encoder().length(), 1); // error[E0599]: no method named `length` found for type `&std::boxed::Box<(dyn Encoder + 'static)>` in the current scope } 。因此,如果您想创建一个虚拟主题   对于名称为orders的主题,您需要创建一个目标   名称为VirtualTopic.<topic name>。这意味着发布者发送   消息发送到名为VirtualTopic.orders的主题。为了消费   从虚拟主题支持的队列中,消费者必须   订阅名称遵循模式的队列   VirtualTopic.orders