搭建延时场景。
配置插件。rabbitmq需要安装延迟消息的专用插件。
配置关键属性-exchange-type。
在生产者发送消息给rabbitmq的时候,做点手脚。在Message header中设置延迟时间。
在界面上查看延迟消息的特殊标签。
接口传递body和延迟的时间,以秒为单位。
header中设置x-delay(居然不是x-man,幽默),正数*1000,时间过后,消息才会送到消费者那里。
把String的body设置进Messagebean并传给生产者。直接导致消费者的形式参数从Object(最开始,是String类型的body用Object接收,现在变成用Object接收String)变成MessageBean。
output+input becomes fake self-definition topic,truely topic appears in configration file.
inject self-definition topic into container.
binding input with listener method,which makes method contacting with fake topic.
消费者信道、生产者信道、虚假的话题、真实的话题、监听方法与消费者信道绑定使得方法成为了消费者。生产者往生产者信道发送一条消息,消费者接收话题中的消息。
生产者和消费者的信道是多对多的关系。比如三个节点,每个节点都有一个生产者和一个消费者。消息从一个生产者信道流到多个(分组了)或全部消费者(没分组,每个信道都有份)信道。
考虑一个节点过于简单,往集群方向考虑(同一个application,仅仅只是端口不一样,多个应用都开起来。)
在配置文件中有一个重定向的操作,destination,将prod和consu的信道重定向到另外一个名字的topic,delayed-topic,不知道delayed-topic是自定义的还是队列里面设置的定死的,总之,delayed-topic就是真实的topic,topic指的就是信道的集合。还有延迟消息不是每个中间件都有,所以画龙点睛之作那里也写一个rabbit。
声明一个queue的exchange类型(声明延迟队列的画龙点睛之笔)。
并不是所有的中间件都支持延迟消息,所以要指明中间件为rabbit。
出现在界面中exchange中的delayed-topic(Name)和我在配置文件中设置的真实topic保持一致额。type是x-delayed-message(这个type是叫做信道类型。如果是普通topic那么type就是topic,如果是延迟消息那么type就是x-delayed-message)
如果你在项目中设置的延迟消息不生效怎么办,第一件事就是到界面看name、type和feature(dm(delayed message))是否存在。如果feature中没有dm的话,可能创建这个topic的时候参数给错了。
在queue中所有message的数量。
post请求方式的参数用@RequestParam修饰了,除了用params外还可以用x-www-form那个。
调用接口send一条message之后的指定时间之后,消费者才会消费那条消息,是消息滞留在生产者信道了吧。