网站怎么做外链知乎,徐州建设安全监督网站,站酷海报设计图片,广州南沙建设交通网站官网地址#xff1a; Messaging that just works — RabbitMQ
我的Docker博客:Docker-CSDN博客
1.结构 其中包含几个概念#xff1a; **publisher**#xff1a;生产者#xff0c;也就是发送消息的一方 **consumer**#xff1a;消费者#xff0c;也就是消费消息的一方 …官网地址 Messaging that just works — RabbitMQ
我的Docker博客:Docker-CSDN博客
1.结构 其中包含几个概念 **publisher**生产者也就是发送消息的一方 **consumer**消费者也就是消费消息的一方 **queue**队列存储消息。生产者投递的消息会暂存在消息队列中等待消费者处理 **exchange**交换机负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。 **virtual host**虚拟主机起到数据隔离的作用。每个虚拟主机相互独立有各自的exchange、queue
2.Docker安装
基于Docker来安装RabbitMQ使用下面的命令即可
docker run \-e RABBITMQ_DEFAULT_USERuser1 \-e RABBITMQ_DEFAULT_PASS123 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network n1 \-d \rabbitmq:3.8-management
root 是 你设置的用户名
123是你设置的密码
n1是你自定义的网络
可以看到在安装命令中有两个映射的端口 15672RabbitMQ提供的管理控制台的端口 5672RabbitMQ的消息发送处理接口
安装完成后我们访问 http://192.168.150.101:15672http://192.168.48.129:15672/http://192.168.150.101:15672即可看到管理控制台。首次访问需要登录默认的用户名和密码在配置文件中已经指定了。
注意网址中的192.168.48.129要改成你自己虚拟机的 3.后端
3.1引入依赖 !--AMQP依赖包含RabbitMQ--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependency
3.2yml
spring:rabbitmq:host: 192.168.48.129port: 5672virtual-host: /username: user1password: 123listener:simple:prefetch: 1 3.3.1.Bean的方式声明队列和交换机
新建一个config类 用fanout类型的交换机来做例子 下面的代码会生成一个交换机
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class DirectConfig {//声明交换机Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange(a.fanout);}//创建1个队列Beanpublic Queue fanoutQueue1(){return new Queue(fanout.queue1);}//绑定队列和交换机Beanpublic Binding bindingQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);}}
接收并处理
写在业务里
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;Slf4j
Component
public class MqListener {//业务逻辑RabbitListener(queues fanout.queue1)public void listenFanoutQueue1(String msg) throws InterruptedException {System.out.println(消费者1 收到了 fanout.queue1的消息【 msg 】);}}
测试类 Testvoid test(){String queuename hmall.fanout1;String message hello, amqp!;rabbitTemplate.convertAndSend(queuename, null,message);} 3.3.2基于注解声明交换机和队列
不用再在配置类里去声明了,直接业务里用注解一同声明交换机和队列了 这里用direct类型的交换机来做例子 下面代码会创建一个交换机b.direct和两个队列direct.queue1,direct.queue2 import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;import java.util.Map;Slf4j
Component
public class MqListener {RabbitListener(bindings QueueBinding(value Queue(name direct.queue1, durable true),exchange Exchange(name b.direct, type ExchangeTypes.DIRECT),key {red, blue}))public void listenDirectQueue1(String msg) throws InterruptedException {System.out.println(消费者1 收到了 direct.queue1的消息【 msg 】);}RabbitListener(bindings QueueBinding(value Queue(name direct.queue2, durable true),//队列名,是否持久化//交换机名,交换机类型 exchange Exchange(name b.direct, type ExchangeTypes.DIRECT),//direct类型交换机需要传的keykey {red, yellow}))public void listenDirectQueue2(String msg) throws InterruptedException {System.out.println(消费者2 收到了 direct.queue2的消息【 msg 】);}
}
测试类 Testvoid testSendDirect() {String exchangeName b.direct;String msg 蓝色通知;rabbitTemplate.convertAndSend(exchangeName, blue, msg);} Testvoid testSendDirect2() {String exchangeName b.direct;String msg 红色通知;rabbitTemplate.convertAndSend(exchangeName, red, msg);} Testvoid testSendDirect3() {String exchangeName b.direct;String msg 黄色通知;rabbitTemplate.convertAndSend(exchangeName, yellow, msg);}