ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RabbitMQ使用

RabbitMQ使用 RabbitMQ安装使用docker 快速安装1、拉取镜像docker pull rabbitmq:management2、启动容器docker run-d \--name rabbitmq \--hostname rabbit-node \-p5672:5672\-p15672:15672\-v rabbitmq_data:/var/lib/rabbitmq \-eRABBITMQ_DEFAULT_USERadmin \-eRABBITMQ_DEFAULT_PASSadmin123 \ rabbitmq:management参数说明-d后台守护运行--hostname必须指定Erlang 节点名依赖 hostname随机主机名会丢数据Amazon ECR…5672AMQP 端口代码连接 MQ 用15672Web 管理后台端口-v rabbitmq_data:/var/lib/rabbitmq数据卷持久化删除容器消息不丢失环境变量自定义管理员账号密码guest 默认只能本地访问远程不能用3、验证浏览器访问http://localhost:15672/输入容器启动时的账号密码。简单消息发送及消费1、在管理页面新增一个简单队列2、新建一个项目导入mvc及mq依赖springboot 版本为4.1.1配置文件添加mq的配置3、新建一个消息发送者使用容器注入的RabbitTemplet设置路由key为队列名就能发送消息4、新建一个消费者消费者通过RabbitListener实现对队列的监听简单消息-多个消费者一个队列可以同时被多个消费者监听默认通过轮询方式将消息发送给多个消费者一个消息只会被消费一次。若是消费者之间消费能力不一样可以设置prefetch为1,表示消费消息时最多预取1条消费完了再从队列中拿当消费者1处理速度大于消费者2时它能处理更多消息。消息发送消费流程生产者生产消息-交换机-队列-消费者扇出交换机Fanout类似于广播当生产者指定了类型为fanout的交换机消息将投递给该交换机绑定的所有队列消费者监听对应队列就能完成消费。1、新建一个fanout类型的交换机my.fanout2、新建两个队列fanout.queue1、fanout.queue23、交换机绑定绑定两个队列4、新建一个消息生成者将消息发送到my.fanout路由key为空消息发送后两个队列都能收到5、消费者监听指定队列就能完成消费直连交换机Direct直接交换机绑定队列时需要指定路由key路由key完全匹配消息才会投递到队列。1、创建类型为Direct的交换机2、创建两个队列direct.queue1、direct.queue23、为交换机绑定队列绑定队列时需要指定路由key绑定direct.queue1时绑定路由key为 red、和bluedirect.queue2绑定路由key为blue、black。4、创建生产者投递消息生产者指定交换机为my.direct分别发送3条不同的路由key5、消费者分别指定direct.queue1和direct.queue2因为red 只有queue1有绑定所以只会发给queue1black只有queue2绑定所以只会发给queue2blue两个队列都有绑定所以会同时投递主题交换机Topic主题交换机与直接交换机类似但比直接交换机灵活。topic路由key由“.”分割例如china.news、china.weather。特别的“#” 表示匹配0个或多个、“*”表示匹配一个。“china.#” 可以匹配china、china.news、china.weahter、china.news.cd等但是china.* 只能匹配china.news或china.weather不能匹配china或china.news.cd。1、新增交换机类型指定为topic2、新增两个队列topic.queue1、topic.queue23、交换机绑定队列队列1接收所有china开头的路由消息队列2接收两段路由其中第二段为weather。4、创建消息生产者指定交换机为my.topic分别发送路由keychina.weather、china.weather.cd、japan.weather、xxx.yyy四条消息。topic.queue1china.weather、china.weather.cd 两条消息topic.queue2china.weather、japan.weather 两条消息xxx.yyy 由于没有绑定关系能匹配该消息将丢失5、消费者绑定topic.queue1和topic.queue2代码中创建交换机、队列及绑定关系使用RabbitMQ首先需要创建交换机、队列和绑定关系。这些可以通过管理页面直接添加也可以通过代码的方式添加。交换机、队列及绑定关系一般在消费者中创建。1、配置类通过注入配置类完成对应创建。例如创建一个fanout类型的交换机名字为my.fanout2创建两个队列:fanout2.queue1、fanout2.queue2。交换机创建两个绑定关系分别绑定两个队列。启动后观察控制页面2、注解交换机、队列及绑定关系可以直接在RabbitListener注解中指定。例如创建一个直连交换机名称为direct2.exchange创建两个队列分别为direct2.queue1、direct2.queue1队列1路由key为red、blue队列2路由key为blue、black。控制台可查看交换机、队列及绑定关系对象序列化默认消息发送时会采用jdk默认的序列化类转换的数据不便于查看可以注入jackson的序列化类将数据以json方式序列化。1、新建一个队列object.queue2、发送一条对象类型的消息3、观察消息在队列中的存储方式对象默认被进行了JDK序列化存储数据不方便查看且浪费存储空间4、项目中注入JacksonJsonMessageConverter的MessageConverter再次发送消息可以看到消息被正常存储5、消费端也需要注入同样的消息转换类保证消息被正常读取转换
返回列表