RabbitMQ消息服务中Topic类型交换机根据通配符路由消息,*代表一个单词,#代表代表0或多个单词。

 
生产者

消费者

 
代码
Producer.java
 
package com.test.topic2;
 
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
 
public class Producer {
public static void main(String[] args)
{
try
{
//1.
ConnectionFactory cf = new ConnectionFactory();
cf.setUsername("admin");
cf.setPassword("admin");
cf.setHost("192.168.169.142");
cf.setPort(5672);
//2.
Connection con = cf.newConnection();
//3.
Channel channel = con.createChannel();
//4.
String queue1 = "topic_queue1";
String queue2 = "topic_queue2";
String queue3 = "topic_queue3";
//5.
channel.queueDeclare(queue1, false, false, false, null);
channel.queueDeclare(queue2, false, false, false, null);
channel.queueDeclare(queue3, false, false, false, null);
//6.
String exg = "topic_exg";
channel.exchangeDeclare(exg, "topic", false);
//7.
channel.queueBind(queue1, exg, "*.test");//Binding key
channel.queueBind(queue2, exg, "#.test");//Binding key
channel.queueBind(queue3, exg, "my.user.test");//Binding
key
//8.
String message = "Hello Topic Message";
channel.basicPublish(exg, "user.test",
MessageProperties.TEXT_PLAIN, message.getBytes());
//9.
channel.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
 
Customer.java
 
package com.test.topic2;
 
import java.io.IOException;
 
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.ShutdownSignalException;
 
public class Customer implements
com.rabbitmq.client.Consumer{
public static void main(String[] args)
{
try
{
//1.
ConnectionFactory cf = new ConnectionFactory();
cf.setUsername("admin");
cf.setPassword("admin");
cf.setHost("192.168.169.142");
cf.setPort(5672);
//2.
Connection con = cf.newConnection();
//3.
Channel channel = con.createChannel();
//4.
String queue1 = "topic_queue1";
channel.queueDeclare(queue1, false, false, false, null);
com.test.topic2.Customer cust = new
com.test.topic2.Customer();
channel.basicConsume(queue1, true, cust);
 
Thread.sleep(5000);
channel.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
 
@Override
public void handleConsumeOk(String consumerTag) {
// TODO Auto-generated method stub
}
 
@Override
public void handleCancelOk(String consumerTag) {
// TODO Auto-generated method stub
}
 
@Override
public void handleCancel(String consumerTag) throws
IOException {
// TODO Auto-generated method stub
}
 
@Override
public void handleDelivery(java.lang.String consumerTag,
     
      Envelope
envelope,
     
     
AMQP.BasicProperties properties,
     
      byte[]
body) throws IOException {
// TODO Auto-generated method stub
System.out.println("receive=" + new String(body));
}
 
@Override
public void handleShutdownSignal(String consumerTag,
ShutdownSignalException sig) {
// TODO Auto-generated method stub
}
 
@Override
public void handleRecoverOk(String consumerTag) {
// TODO Auto-generated method stub
}
}
 

9.RabbitMQ Topic类型交换机的更多相关文章

  1. 10.RabbitMQ Fanout类型交换机

    Fanout类型交换机忽略Routing Key,它将消息传递到所有与它绑定的队列上.       Producer.java package com.test.fanout;   import co ...

  2. RabbitMQ学习总结 第六篇:Topic类型的exchange

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  3. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  4. RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    1.topic类型的Exchange 我们之前说过Topic类型的Exchange是direct类型的模糊查询模式,可以通过routkey来实现模糊消费message,topic的模糊匹配有两种模式: ...

  5. rabbitMQ学习笔记(六) topic类型消息。

    上一节中使用了消息路由,消费者可以选择性的接收消息. 但是这样还是不够灵活. 比如某个消费者要订阅娱乐新闻消息 . 包括新浪.网易.腾讯的娱乐新闻.那么消费者就需要绑定三次,分别绑定这三个网站的消息类 ...

  6. RabbitMQ入门学习系列(六) Exchange的Topic类型

    快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...

  7. 【RabbitMQ学习之二】RabbitMQ四种交换机模式应用

    环境 win7 rabbitmq-server-3.7.17 Erlang 22.1 一.概念1.队列队列用于临时存储消息和转发消息.队列类型有两种,即时队列和延时队列. 即时队列:队列中的消息会被立 ...

  8. 四、RabbitMQ Exchange类型

    RabbitMQ整体上是一个生产者与消费者模型,主要负责接收.存储和转发消息.可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ就好 ...

  9. RabbitMQ Topic exchange

    Topic exchange topic与之前的每个类型都不同(ps:废话每个都是不同的).Topic解决了我们另一个需求.举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出 ...

随机推荐

  1. react-devtools超级简单安装教程

    有时候看网上各路大神,写如何安装react-devtools,大神就是大神,好多步骤一笔带过,导致一些学习者看的一脸懵逼,今天我给大家讲超级简单的react-devtools安装步骤,相信看过的小伙伴 ...

  2. Vue学习笔记【12】——过滤器

    概念:Vue.js 允许你自定义过滤器,可被用作一些常见的文本格式化.过滤器可以用在两个地方:mustache 插值和 v-bind 表达式.过滤器应该被添加在 JavaScript 表达式的尾部,由 ...

  3. jQuery, js 验证两次输了密码的一相同

    <div class="form-group"> <label class="col-sm-2 control-label font"> ...

  4. [NOI2016]区间 题解(决策单调性+线段树优化)

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1593  Solved: 869[Submit][Status][ ...

  5. ES数据导入导出

    ES数据导入导出   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  6. linux下根据根据进程号查端口、根据端口号查进程号汇总,以及netstat的相关资料(工作中匮乏的知识)

    根据端口查进程: lsof -i:port netstat -nap | grep port 根据进程号查端口: lsof -i|grep pid netstat -nap | grep pid 根据 ...

  7. XML 介绍

    XML eXtensible Markup language:可扩展的标记语言 解决HTML不可扩展的问题, 作用:保存或传输数据,不是用来显示数据的. XML介绍 1.  基于文本格式的 2.  标 ...

  8. Java【并发】面试题

    精尽 Java[并发]面试题 以下面试题,基于网络整理,和自己编辑.具体参考的文章,会在文末给出所有的链接. 如果胖友有自己的疑问,欢迎在星球提问,我们一起整理吊吊的 Java[并发]面试题的大保健. ...

  9. leetcode 596 BUG笔记

    There is a table courses with columns: student and class Please list out all classes which have more ...

  10. MySQL 建库建表规范

    1.约束 1.PrimaryKey(PK)主键 特点:唯一 + 非空,一张表中只能有一个主键约束,一般是一个数字列,最好是无意义的. 2.NOT NULL 非空 特点:不能为空,建议在MySQL中,业 ...