RabbitMQ实现路由模式Routing
简介
跟订阅模式类似,只不过在订阅模式的基础上加上了类型,订阅模式是分发到所有绑定到交换机的队列,路由模式只分发到绑定在交换机上面指定路由键的队列。
使用场景:只将一些错误log存到文件中,把所有的log都打印到控制台里
实现过程发送指定类型消息为了方便测试,在rabbitmq-producer模块下添加一个发送指定类型消息功能,消息类型有info、error、warning
首先在sendInformationPage.html中添加一个form标签:
123456789101112<form action="/sendRoutingMessage"> <h2>发送指定类型的消息</h2> 消息: <input type="text" name="message" required="required"><br> 类型: <select name="routingKey"> ...
RabbitMQ实现订阅模式Publish/Subscribe
简介
生产者生产的消息,所有订阅过的消费者都能够接收到消息
Exchange采用Fanout类型,即广播方式
Fanout类型的交换机会把消息发送到所有绑定到该交换机的队列
适合场景:将同一条消息通过手机短信,APP,邮件等方式推送给用户
实现过程批量发送订阅消息为了方便测试,在rabbitmq-producer模块下添加一个批量发送消息功能,可以自定义批量发送的消息数量
首先在sendInformationPage.html中添加一个form标签:
12345<form action="/sendFanoutMessageBatch"> <h2>批量发送订阅消息</h2> 数量:<input type="text" name="messageCount"> <input type="submit" value="批量发送"></form>
在rabbitmq-common模块的RabbitMQC ...
RabbitMQ报错:reply-code=404, reply-text=NOT_FOUND - no的解决办法
情况一报错信息reply-code=404, reply-text=NOT_FOUND - no exchange
原因只启动Provider,然后发送消息到队列,如果没有创建交换机(RabbitMQ中原来没有对应交换机),就会报错
解决办法有两种解决办法:
①先启动Consumer,会自动创建RabbitMQ配置类中的交换机和队列,然后启动Provider发送消息到队列即可
②先启动了Provider,但是先不要发送消息,启动Consumer后再发送消息到队列
情况二报错信息reply-code=404, reply-text=NOT_FOUND - no queue
原因RabbitMQ配置类没有生效
解决办法在Consumer启动类添加注解@ComponentScan,我的配置类在 com.ledao.common.config 目录下,扫描的范围如下:(下面两种方式都行)
1234//扫描到上三级目录,范围更大@ComponentScan(basePackages = "com")//扫描到上两级目录@ComponentScan(basePackages = ...
Docker安装Mycat
概述安装方式有两种:
pull命令
Dockerfile命令
pull命令拉取镜像1docker pull manondidi/mycat
创建配置目录创建一个目录,路径为:/home/mycat/conf,这个目录用于存放Mycat相关配置文件以及目录挂载
复制文件创建容器
1docker run -p 8066:8066 -d --name mycat Mycat镜像id
复制容器的rule.xml schema.xml server.xml到 /home/mycat/conf 目录下
123docker cp mycat:/usr/local/mycat/conf/rule.xml /home/mycat/confdocker cp mycat:/usr/local/mycat/conf/server.xml /home/mycat/confdocker cp mycat:/usr/local/mycat/conf/schema.xml /home/mycat/conf
删除容器把之前用于复制文件的Mycat容器删除
1234567#停止docker stop My ...
RabbitMQ实现工作模式Work queues
前提条件已经实现了监听队列接收消息,具体步骤查看:RabbitMQ实现监听队列接收消息
介绍工作模式是一个或者多个消费者共同消费一个队列中的消息,队列中的每一个消息只可能被其中一个消费者消费,比如:多个人抢一个蛋糕,只有一个人可以抢到
应用场景:对于消息任务很多的情况,可以使用工作队列提高任务处理的速度
原理:集群处理大量的消息
实现过程批量发送消息为了方便测试,在rabbitmq-producer模块下添加一个批量发送消息功能,可以自定义批量发送的消息数量
首先在sendInformationPage.html中添加一个form标签:
12345<form action="/sendInformationBatch"> <h2>批量发送</h2> 数量:<input type="text" name="informationCount"> <input type="submit" value="批量发送"> ...
RabbitMQ实现监听队列接收消息
说明在博客 RabbitMQ实现消费者接收消息 的基础上修改,接收消息的基本配置查看前面的博客即可
实现过程修改消费者Service类添加接口方法receiveMessage2()
123456/** * 监听队列接收消息 * * @param message */void receiveMessage2(String message);
修改消费者Service实现类实现RabbitMQConsumerService类的接口方法receiveMessage2(),添加注解@RabbitListener实现监听,可以监听多个队列,在{}中用 , 隔开多个队列名称即可
12345@Override@RabbitListener(queues = {RabbitMQConfig.DIRECT_QUEUE})public void receiveMessage2(String message) { System.out.println("接收到的消息:" + message);}
测试去rabbitmq-consumer模 ...
RabbitMQ实现消费者接收消息
前提已经搭建好RabbitMQ基本环境,搭建步骤查看博客:搭建RabbitMQ基本环境
配置好RabbitMQ的交换机、队列、队列绑定交换机,具体步骤查看博客:RabbitMQ实现生产者发送消息 ,rabbitmq-common模块的RabbitMQConfig.java就是配置类
项目结构
实现过程application.yml配置添加一个application.yml配置文件,内容如下:
12345678910server: port: 81spring: rabbitmq: host: 192.168.0.145 #虚拟机IP port: 5672 #RabbitMQ默认TCP监听端口 username: admin #登录RabbitMQ管理系统的用户名 password: admin #登录RabbitMQ管理系统的密码 virtual-host: / #默认就是/,可不加
接收消息页面123456789101112131415161718192021222324252627<!DOCTYPE html><html la ...
RabbitMQ实现生产者发送消息
前提已经搭建好RabbitMQ基本环境,搭建步骤查看博客:搭建RabbitMQ基本环境
项目结构
实现过程application.yml配置添加一个application.yml配置文件,内容如下:
12345678910server: port: 80spring: rabbitmq: host: 192.168.0.145 #虚拟机IP port: 5672 #RabbitMQ默认TCP监听端口 username: admin #登录RabbitMQ管理系统的用户名 password: admin #登录RabbitMQ管理系统的密码 virtual-host: / #默认就是/,可不加
发送消息页面命名为:sendInformationPage.html,内容如下:
12345678910111213<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title> ...
搭建RabbitMQ基本环境
创建父项目新建一个Maven项目,命名为:rabbitmqtest
完整pom.xml文件如下:
1234567891011121314151617181920212223242526272829303132333435<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>o ...
Docker安装RabbitMQ
拉取镜像1docker pull rabbitmq:3-management
创建运行容器1docker run -d --name rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 5672:5672 -p 15672:15672 RabbitMQ镜像id
RABBITMQ_DEFAULT_USER设置登录RabbitMQ管理系统的用户名
RABBITMQ_DEFAULT_PASS设置登录RabbitMQ管理系统的密码
5672是RabbitMQ默认TCP监听端口
15672是RabbitMQ的Web管理界面端口
测试在浏览器地址栏输入:http://虚拟机IP:15672/ ,输入用户名和密码,用户名和密码都是admin