微信关注
在线联系

spring boot使用RabbitMQ实现topic 主题

前一篇我们实现了消息系统的灵活配置。代替了使用扇形尊龙现金d88交换器的配置。使用直连交换器,并且基于路由键后可以有选择性接收消息的能力。

虽然使用直连交换器可以改善我们的系统,但是它仍有局限性,它不能实现多重条件的路由。

在我们的消息系统中,我们不仅想要订阅基于路由键的队列,还想订阅基于生产消息的源。这些概念来自于unix工具syslog。该日志基于严格的 和容易的的路由方式。我们的例子比这个要简单。

这个例子将会给我们很大的灵活性,比如我们既想监听来‘cron'自错误的日志又想监听来自‘kern'的所有日志。

为了实现这个灵活性,我们需要知道更多关于主题交换器的内容。

主题交换器


使用主题交换器定义路由键需要注意点2点


在这个例子中,我们将发送所有描述动物的消息。这个消息将会和由3个单词2个点构成的路由键一起发送。第一个单词是表述速度,第二个描述颜色,第三个描述种类:" speed . colour . species "。

创建三种绑定,q1和键"*.orange.*"绑定,q2和"*.*.rabbit" 、"lazy.#"绑定。

三种绑定关系的概述为:



那么像"lazy.orange.male.rabbit"也是四个词的路由键呢?,由于匹配到了lazy.#这个将会被传递到第二个队列中。

主题交换器的小技巧

主题交换器是牛逼的并且表现的与其它交换器相似。

代码示例



package com.zb.rabbitmqtest.t5topics.config;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
 * @author 张博
@configuration
public class config {
 * 创建人:张博
 * 时间:2018/3/5 上午10:45
 * @apinote 定义主题交换器
 @bean
 public topicexchange topicexchange {
 return new topicexchange;
 * 创建人:张博
 * 时间:2018/3/5 上午10:48
 * @apinote 定义自动删除匿名队列
 @bean
 public queue autodeletequeue0 {
 return new anonymousqueue;
 * 创建人:张博
 * 时间:2018/3/5 上午10:48
 * @apinote 定义自动删除匿名队列
 @bean
 public queue autodeletequeue1 {
 return new anonymousqueue;
 * 创建人:张博
 * 时间:2018/3/5 上午10:48
 * @param topicexchange 主题交换器
 * @param autodeletequeue0 自动删除队列
 * @apinote 绑定使用路由键为 orange 的 autodeletequeue0 队列到主题交换器上
 * @return binding
 @bean
 public binding binding0a {
 return bindingbuilder.bind.to.with;
 * 创建人:张博
 * 时间:2018/3/5 上午10:48
 * @param topicexchange 主题交换器
 * @param autodeletequeue1 自动删除队列
 * @apinote 绑定使用路由键为 black 的 autodeletequeue1 队列到主题交换器上
 * @return binding
 @bean
 public binding binding1a {
 return bindingbuilder.bind.to.with;
 * 创建人:张博
 * 时间:2018/3/5 上午10:48
 * @param topicexchange 主题交换器
 * @param autodeletequeue1 自动删除队列
 * @apinote 绑定使用路由键为 green 的 autodeletequeue1 队列到主题交换器上
 * @return binding
 @bean
 public binding binding1b {
 return bindingbuilder.bind.to.with;

package com.zb.rabbitmqtest.t5topics.receiver;
import org.springframework.amqp.rabbit.annotation.rabbitlistener;
import org.springframework.stereotype.component;
 * @author 张博
@component
public class receiver {
 @rabbitlistener
 public void receiver0 {
 system.out.println;
 //try {
 // thread.sleep;
 //} catch  {
 // e.printstacktrace;
 @rabbitlistener
 public void receiver1 {
 system.out.println;
 //try {
 // thread.sleep;
 //} catch  {
 // e.printstacktrace;

package com.zb.rabbitmqtest.t5topics.send;
import org.springframework.amqp.core.topicexchange;
import org.springframework.amqp.rabbit.core.rabbittemplate;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.component;
 * @author 张博
@component
public class send {
 @autowired
 private topicexchange topicexchange;
 @autowired
 private rabbittemplate rabbittemplate;
 private string[] keys = {"quick.orange.rabbit",
 "lazy.orange.elephant", "quick.orange.fox",
 "lazy.brown.fox", "lazy.pink.rabbit", "quick.brown.fox"};
 public void send {
 string message = "哈哈哈";
 for  {
 system.out.println);
 rabbittemplate.convertandsend, keys[5], message);

package com.zb.rabbitmqtest.t5topics.send;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;
 * @author 张博
@runwith
@springboottest
public class sendtest {
 @autowired
 private send send;
 @test
 public void send throw____ception {
 send.send;

测试结果我就不放了 大家请自行查看。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。


HOME |  ABOUT US |  PORTFOLIO |  NEWS |  CONTACT US

Copyright © 2018 尊龙人生就是搏d88尊龙人生就是搏d88-尊龙现金d88 All Rights Reserved Power by DedeCms


CONTACT US
+86 02888888888