rabbitmq学习记录
1.topic 主题模式
rounting key满足如下规则
单词.单词
可以代表一个任意单词 #可以代表多个任意单词
当一个队列的绑定键为#就变成fanout
当一个队列没有#和绑定类型就是direct
public class EmitLogTopic {
public static final String EXCHANGE_NAME = "topic_logs";
public static void main(String[] args) throws Exception{
Channel channel = RabbitMqUtils.getChannel();
/**
*
*/
Map<String,String> bindingKeyMap= new HashMap<String,String>();
bindingKeyMap.put("quick.orange.rabbit","被队列Q1Q2接收到了");
bindingKeyMap.put("lazy.orange.elephant","被队列Q1Q2接收到");
bindingKeyMap.put("quick.orange.fox","被队列Q1接收到");
bindingKeyMap.put("lazy.brown.fox","被队列Q2接收到");
bindingKeyMap.put("lazy.pink.rabbit","虽然满足两个绑定但只被队列Q2接受一次");
bindingKeyMap.put("quick.brown.fox","不匹配任何绑定不会被任何队列接受到,会被丢弃");
bindingKeyMap.put("quick.orange.nale.rabbit","是四个单词,不匹配任何绑定,会被丢弃");
bindingKeyMap.put("lazy.orange.male.rabbit","是四个单词但匹配Q2");
//高级循环
for (Map.Entry<String, String> bindkingKeyEntry : bindingKeyMap.entrySet()) {
String routingKey = bindkingKeyEntry.getKey();
String message = bindkingKeyEntry.getValue();
channel.basicPublish(EXCHANGE_NAME,routingKey,null,message.getBytes(StandardCharsets.UTF_8));
System.out.println("生产者发送消息");
}
}
}
public class ReceiveLogsTopic02 {
//交换机名称
public static final String EXCHANGE_NAME = "topic_logs";
public static void main(String[] args) throws Exception{
Channel channel = RabbitMqUtils.getChannel();
//声明交换机
channel.exchangeDeclare(EXCHANGE_NAME,"topic");
//声明队列
String queueName = "Q2";
/**
* 1.名称
* 2.持久化
* 3.共享
* 4.自动删除
* 5。参数
*/
channel.queueDeclare(queueName,false,false,false,null);
channel.queueBind(queueName,EXCHANGE_NAME,"*.*.rabbit");
channel.queueBind(queueName,EXCHANGE_NAME,"lazy.#");
System.out.println("等待接收消息");
//接收消息
DeliverCallback deliverCallback = (consumerTag, message) -> {
System.out.println("控制台1打印接收到的消息" + new String(message.getBody()));
System.out.println("接收队列:" + queueName + "绑定键" + message.getEnvelope().getRoutingKey());
};
channel.basicConsume(queueName,true,deliverCallback,consumerTag ->{});
}
}
Springboot与rabbitmq整合
添加依赖
<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>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
server:
port: 8021
spring:
#应用的名字,在微服务中比较重要
application:
name: demo2
#rabbitmq的信息
rabbitmq:
host: 202.200.231.14
port: 15672
username:
password:
Springboot中提供母版对象,rabbittemplate,使用时直接在项目中注入即可使用。
rabbitmq整合springboot
引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
</dependencies>
配置文件
server:
port: 8021
spring:
#给项目来个名字
application:
name: rabbitmq-provider
#配置rabbitMq 服务器
rabbitmq:
host:
port:
username:
password:
virtual-host: /ems