5、(Topic)通配符模式 (一对多)在交换机与队列绑定的时候,使用通配符进行判断是否满足发布该队列条件。*表示一个单词、#表示一个或多个单词。
使用java操作rabbitmq中间件所需要使用的maven依赖
com.rabbitmq
amqp-client
5.9.0
org.apache.maven.plugins
maven-jar-plugin
3.2.0
简单模式下的生产者与消费者。会默认有一个交换机,无需我们自己创建
简易模式下生产者与消费者关系为一对一
=========================================================================================
生产者:
package cn.xjt.rabbitmq;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
-
@author xu
-
@Description
-
@createTime 2021年02月23日 10:14:00
*/
public class ProductHelloWorld {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置参数
factory.setHost(“ip”); //主机,默认为localhost
factory.setPort(5672); //端口号
factory.setVirtualHost(“/xujiangtao”); //虚拟机
factory.setUsername(“admin”);
factory.setPassword(“000000”);
//创建连接
Connection connection = factory.newConnection();
//创建channel
Channel channel = connection.createChannel();
//创建队列
/*
queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
*/
channel.queueDeclare(“hello world”,true,false,false,null);
/*
basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
*/
for (int i=0;i<5;i++){
String message=“hello god”;
//发送消息
channel.basicPublish(“”,“hello world”,null,message.getBytes());
System.out.println(“发送成功”);
}
channel.close();
connection.close();
}
}
消费者:
package cn.xjt.rabbitmq;
import com.rabbitmq.client.*;
import com.rabbitmq.client.impl.AMQImpl;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
-
@author xu
-
@Description
-
@createTime 2021年02月23日 11:00:00
*/
public class ConsumerHelloWorld {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置参数
factory.setHost(“ip”); //主机,默认为localhost
factory.setPort(5672); //端口号
factory.setVirtualHost(“/xujiangtao”); //虚拟机
factory.setUsername(“admin”);
factory.setPassword(“000000”);
//创建连接
Connection connection = factory.newConnection();
//创建channel
Channel channel = connection.createChannel();
//创建队列
/*
queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
*/
// channel.queueDeclare(“hello world”,true,false,false,null);
Consumer consumer = new DefaultConsumer(channel){
//回调方法
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
// super.handleDelivery(consumerTag, envelope, properties, body);
// System.out.println(“consumerTag=”+consumerTag);
// System.out.println(“Exchange=”+envelope.getExchange());
// System.out.println(“RoutingKey=”+envelope.getRoutingKey());
// System.out.println(“properties=”+properties.toString());
System.out.println(“接受成功”);
System.out.println(“消息为=”+new String(body));
}
};
channel.basicConsume(“hello world”,true,consumer);
}
}
topic模式下,生产者与消费者关系为一对多,通过通配符来判断是否发布到队列
通配符中 * 为一个单词。 # 为一个或多个单词
如#.error所有error结束的通配符信息的都可以发布到当前队列
例如: log.error user.error 都可以接受 log.warning不接受
*.error 表示error前面只能有一个单词
* . * 表示所有以(一个单词).(一个单词)都可以接受
生产者:
package cn.xjt.rabbitmq;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
-
@author xu
-
@Description
-
@createTime 2021年02月23日 10:14:00
*/
public class ProductTopics {
public static void main(String[] args) throws IOException, TimeoutException {
//创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//设置参数
factory.setHost(“ip”); //主机,默认为localhost
factory.setPort(5672); //端口号
factory.setVirtualHost(“/xujiangtao”); //虚拟机
factory.setUsername(“admin”);
factory.setPassword(“000000”);
//创建连接
Connection connection = factory.newConnection();
//创建channel
Channel channel = connection.createChannel();
String exChangeName=“test_exChange_topic”;
//创建交换机
channel.exchangeDeclare(exChangeName, BuiltinExchangeType.TOPIC,true, false, false, null);
//创建队列
/*
queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
*/
String queuesName1=“test_topic_queues1”;
String queuesName2=“test_topic_queues2”;
channel.queueDeclare(queuesName1,true,false,false,null);
channel.queueDeclare(queuesName2,true,false,false,null);
//绑定交换机和队列
channel.queueBind(queuesName1, exChangeName, “#.error”, null);
channel.queueBind(queuesName2, exChangeName, “user.*”, null);
/*
basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
*/
String message=“hello god”;
//发送消息
channel.basicPublish(exChangeName,“add.user.error”,null,message.getBytes());
System.out.println(“发送成功”);
channel.close();
connection.close();
}
}
多个消费者:
Consumer1
在这里插入代码片package cn.xjt.rabbitmq;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
-
@author xu
-
@Description
-
@createTime 2021年02月23日 12:18:00
*/
public class ConsumerTopic1 {
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
//设置参数
factory.setHost(“ip”); //主机,默认为localhost
factory.setPort(5672); //端口号
factory.setVirtualHost(“/xujiangtao”); //虚拟机
factory.setUsername(“admin”);
factory.setPassword(“000000”);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。
《Java高级面试》
《Java高级架构知识》
《算法知识》
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
分享一些资料给大家,我觉得这些都是很有用的东西,大家也可以跟着来学习,查漏补缺。
《Java高级面试》
[外链图片转存中…(img-uTBy1y3g-1713523521499)]
《Java高级架构知识》
[外链图片转存中…(img-zIM6Qlri-1713523521500)]
《算法知识》
[外链图片转存中…(img-fACk8Bdz-1713523521500)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!