我们已经把环境搭建好了,我们就来编写具体代码,我们首先来编写Provider,消息提供者的代码,编写Provider,我们打开我们的项目,配置文件先关掉,看我们的Provider,Provider这里面我们先看一下Sender,Sender我们之前是按照Direct方式去发送的,交换器,路由器,然后消息,那么这里我们需要注意的就是,路由器的这个key,我们原来是从配置文件里注入进来的,现在我们不要了,我们先暂时把它给写死一下,我们先来看一下,来看一下这个文件,他的路由key是不是用通配的形式来表示的,星点什么log.info,那么我们现在呢,比如我们现在来编写用户服务,那么对于他的路由key,是不是可以用user.log.info,如果是商品呢,我们可以用product.log.info,那么这样的话,不管你前面是用户user,product,只要你的后面,后缀,log.info的,这两个服务的消息,这两个服务info的消息,是不是都会进入到log.info的队列当中,我们现在要描述的是这样的一个过程,我们首先要去创建一个用户服务,这里我们还叫Sender呢,我们给他改个名字,这个是UserSender,然后交换器,我们是从配置文件里读的,我们取的名字叫topic,然后回到我们的Sender里面,比如我们现在起路由键的规则,用户服务就是user.log.info,商品是product.log.info,然后订单服务就是order.log.info,我们按照这个规则去定义他的路由和key,这块我们来写吧,user.log.info,比如我们看一下这个图,它是有info,有error的,然后还有其他的,我们这里就给一个infothis.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.info", "user.log.info....."+msg);我们按照日志级别,比如有debug,有人说你这里写debug也没用啊,因为你这里没有debug的队列,debug虽然这里没有,但是你看最后,全日志处理服务,他是不是包含了*.log.*,那么就是像debug这样的信息,虽然在这个队列的路由key当中,但是最后的log队列里是可以进入到这里面去,就是进入到全日志里是没问题的,所以debug,info,然后还有一个warn,然后还有一个error,我们给他五个级别的日志,这五条像debug,像这个info,error,会进到这两个队列当中,像debug,info,warn,还有error,其实他们都会进入到这个队列里,因为他的路由key的匹配,更模糊,是全日志,然后后面消息,后面的消息我们也可以给他加一个标识this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.debug", "user.log.debug....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.info", "user.log.info....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.warn","user.log.warn....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.error", "user.log.error....."+msg);这样我们就写好了一个UserSender,我们把它定义出来了,用户服务,然后接下来我们还得有商品服务,我们把它copy一下,ProductSender,然后回到我们的productSender当中,我们看一下这个key是不是得改一下,原来我们拷贝的是user服务里面的,他的key是user.info里面的,我们现在在商品服务里面,是不是得改成product.log.info,product.log.error,让product的服务的key是productthis.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.debug", "product.log.debug....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.info", "product.log.info....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.warn","product.log.warn....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.error", "product.log.error....."+msg);其他的我们就不用动了,product就完事了,然后我们还得去copy一个,这个是订单服务,OrderSender,然后回到order的服务当中,这里是不是要叫order.log.debug,然后order.log.info,order.log.warn,order.log.error,this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.debug", "order.log.debug....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.info", "order.log.info....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.warn","order.log.warn....."+msg);
this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.error", "order.log.error....."+msg);这样我们就把服务端的代码就写完了,给他们定义不同的路由key了,然后他会根据不同的路由key,向我们的RabbitMQ发送消息,这是他发送的消息,然后我们把代码整理到笔记当中,这个是UserSender,ProductSender,然后是OrderSender,那么到目前为止呢,消息发送者Provider这边的代码,就写完了
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>rabbitmq-topic-provider</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version><relativePath/> </parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><!-- 这个插件,可以将应用打包成一个可执行的jar包 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
spring.application.name=rabbitmq-topic-providerspring.rabbitmq.host=59.110.158.145
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guestmq.config.exchange=log.topic
package com.learn;import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 消息发送者* @author Administrator**/
@Component
public class UserSender {@Autowiredprivate AmqpTemplate rabbitAmqpTemplate;//exchange 交换器名称@Value("${mq.config.exchange}")private String exchange;/** 发送消息的方法*/public void send(String msg){//向消息队列发送消息//参数一:交换器名称。//参数二:路由键//参数三:消息this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.debug", "user.log.debug....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.info", "user.log.info....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.warn","user.log.warn....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"user.log.error", "user.log.error....."+msg);}
}
package com.learn;import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 消息发送者* @author Administrator**/
@Component
public class ProductSender {@Autowiredprivate AmqpTemplate rabbitAmqpTemplate;//exchange 交换器名称@Value("${mq.config.exchange}")private String exchange;/** 发送消息的方法*/public void send(String msg){//向消息队列发送消息//参数一:交换器名称。//参数二:路由键//参数三:消息this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.debug", "product.log.debug....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.info", "product.log.info....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.warn","product.log.warn....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"product.log.error", "product.log.error....."+msg);}
}
package com.learn;import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/*** 消息发送者* @author Administrator**/
@Component
public class OrderSender {@Autowiredprivate AmqpTemplate rabbitAmqpTemplate;//exchange 交换器名称@Value("${mq.config.exchange}")private String exchange;/** 发送消息的方法*/public void send(String msg){//向消息队列发送消息//参数一:交换器名称。//参数二:路由键//参数三:消息this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.debug", "order.log.debug....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.info", "order.log.info....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.warn","order.log.warn....."+msg);this.rabbitAmqpTemplate.convertAndSend(this.exchange,"order.log.error", "order.log.error....."+msg);}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class RabbitTopicProviderApplication {public static void main(String[] args) {SpringApplication.run(RabbitTopicProviderApplication.class, args);}
}
package com.learn.test;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;import com.learn.OrderSender;
import com.learn.ProductSender;
import com.learn.RabbitTopicProviderApplication;
import com.learn.UserSender;/*** 消息队列测试类* @author Administrator**/
@RunWith(SpringRunner.class)
@SpringBootTest(classes=RabbitTopicProviderApplication.class)
public class QueueTest {@Autowiredprivate UserSender usersender;@Autowiredprivate ProductSender productsender;@Autowiredprivate OrderSender ordersender;/** 测试消息队列*/@Testpublic void test1(){this.usersender.send("UserSender.....");this.productsender.send("ProductSender....");this.ordersender.send("OrderSender......");}
}

Topic交换器-编写生产者相关推荐

  1. Fanout交换器-编写生产者

    我们再来编写生产者,Provider,这里我们已经把消费者给写好了,一个SmsReceiver,一个PushReceiver,先改一下,这是push receiver@RabbitHandler pu ...

  2. Topic交换器-编写消费者

    我们接着来编写Consumer,回到我们的代码当中,打开我们的topic-consumer,配置文件我们已经改完了,先放到这里,看我们的代码,我们先改第一个InfoReceiver,InfoRecei ...

  3. Direct交换器-编写生产者

    我们来编写消息的生产者,Provider,回到我们的代码当中,Provider配置文件已经配置好了,在这里Receiver就不要了,只要Sender就可以了,然后我们来看一下Sender的代码,这是我 ...

  4. Topic交换器-搭建环境

    我们再来看另一个交换器的使用,Topic交换器的使用,Topic交换器也称之为主题交换器,他的特点是什么呢,是根据这个规则来匹配,是一个什么样的规则呢,咱们先看这个图,这个图和上面最大的区别就是,我的 ...

  5. RabbitMQ之Topic交换器模式开发

    Topic交换器,即主题模式,进行规则匹配. 一.Provider 配置文件 1 spring.application.name=provider 2 spring.rabbitmq.host=192 ...

  6. Fanout交换器-编写消费者

    我们已经把环境搭建好了,我们就来编写Provider和Consumer,我们首先 来编写Consumer,然后回到我们的代码当中,我们看一下配置文件,在这个配置文件当中呢,配置了交换器的名称mq.co ...

  7. Direct交换器-编写消费者

    我们已经把环境搭建好了,我们先从Consumer开始写起,看一下如何编写Consumer,回到我们的代码当中,然后我们来看一下我们的代码,这个代码是我们copy过来的,QueueConfig我们当时是 ...

  8. RabbitMQ Topic交换机(生产者)

    /* * 声明主题交换机及相关队列 * 消费者C1 * */ public class ReceiveLogsTopic01 {//交换机名称public static final String EX ...

  9. 用java编写生产者消费者问题_用java代码实现生产者和消费者的问题

    public class ThreadDemo12 { public static void main(String[] args) { goods g=new goods(); Product pr ...

最新文章

  1. Geoserver中切割离线瓦片TileLayer预览时放大之后缺失
  2. 【深度学习】实战教程 | 车道线检测项目实战,霍夫变换 新方法 Spatial CNN
  3. JS forEach()与map() 用法(转载)
  4. 计算机专业都学什么科,大学本科计算机专业都有什么科目?
  5. linux安装下载中文包,linux下安装中文包和字体
  6. 精通Android自定义View(十九)自定义圆形炫彩加载转圈效果
  7. 华为路由器与CISCO路由器在配置上的差别
  8. 重定向ISA日志到SQL2000
  9. Matpower使用中问题
  10. android 主流分辨率是多少,android手机常用分辨率有哪些?
  11. vbs让电脑发音说话
  12. 《概率论与数理统计》学习笔记
  13. 局域网内,两台电脑时间同步
  14. 费解的开关 Java
  15. POJ 1144 Network
  16. android 雷达图 蜘蛛图
  17. SICTF2023 misc-wp
  18. 2007年世界顶级防火墙排名
  19. 如何在Cisco Packet Tracer中创建多个路由器虚拟局域网(方法四)
  20. 神码ai人工智能写作机器人_人工智能和机器学习可以改善营销的6种方式

热门文章

  1. [C#]泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,ListT,DictionaryTkey,Tvalue,SortedListTkey,Tvalue,...
  2. C#生成Excel报表 用MyXls组件生成更完美
  3. Less 命令技巧,从底部网上看
  4. (转) 淘淘商城系列——Redis五种数据类型介绍
  5. ssh报错:Could not load host key:/etc/ssh/ssh_host_rsa_keyssh_host_ecdsa_keyssh_host_ed25519_key...
  6. 反射机制2,Class类的使用
  7. static、final、static final 用法
  8. python 处理日志文件
  9. CentOS5.6 安装RabbitMQ
  10. .net获取客户端信息(二)ashx部分