千家信息网

rabbitmq总结

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,概念1. Exchange: 交换机,消息发送去往的地方2. Queue: 队列,消费消息的地方,exchange会根据自身的类型和routing-key进行消息的分发3. routing-key:路
千家信息网最后更新 2026年11月03日rabbitmq总结

概念

1. Exchange: 交换机,消息发送去往的地方

2. Queue: 队列,消费消息的地方,exchange会根据自身的类型和routing-key进行消息的分发

3. routing-key:路由地址,queue通过key和exchange进行绑定,当消息指定了routing-key然后发送到exchange时,exchange会根据key绑定的列表推送到queue里面

exchange类型:

生产者发送消息去往的地方,生产者只需要知道exchange名字和routingkey既可以发送消息,剩下的由exchange进行转发

  1. topic:只有匹配路由的模式的队列才会收到消息,可以一个路由匹配多个队列,一对多的关系,发送消息只需要指定routing-key即可
  2. direct:只有精确的队列才会收到消息,一对一的关系,发送消息时需要指定队列名
  3. fanout:广播,此时绑定了该exchange的队列都会收到消息,会忽略routing-key,发送消息只需要指定exchange

queue:

接收消息的地方,消费者读取消息的地方,消费者连接到这个队列进行消息的读取。

vhost:

虚拟主机,一个虚拟主机可以有多个exchange和queue,他们是隔离独立的

备份与恢复:

rabbitmq目录里包含两种类型的信息
1:元信息metadata,schema,topology,主要是保存exchange,queue,user,vhost等基本信息
2:消息数据信息:停留在队列里未被消费的消息
配置导入和导出,可以将A服务器的Exchange和Queue导入到B服务器
1:开启rabbitmq-management插件
2:获取rabbitmqadmin命令工具:通过wget http://localhost:15672/cli/rabbitmqadmin
3:安装python
4:python rabbitmqadmin export myrabbit.config -H localhost -P 15672 -u myuser -p mypass
5:配置导入:python rabbitmqadmin import myrabbit.config -H locahost -P 15672 -u myuser -p mypass
6:使用管理端口,不是使用5672端口

集群

每个集群中的节点都是通过传输层连接的。所有节点对之间定期交换tick消息来维护连接来检测连接断开。
集群搭建:
1:安装erlang:这个包安装后足够支持rabbitmq-server运行
编辑/etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
yum install -y erlang
2:安装rabbitmq-server:
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
yum install -y rabbitmq-server-3.7.7-1.el7.noarch.rpm
3:启动服务器:
chkconfig rabbitmq-server on
或者systemctl enable rabbitmq-server
systemctl start rabbitmq-server
查看状态:rabbitmqctl status
4:启动后会在/var/lib/rabbitmq下生成一个.erlang.cookie,需要ls -al查看
复制这个文件到其他节点上,需要修改文件的所有者,否则启动时读取权限出错
chown rabbitmq:rabbitmq .erlang.cookie
5:各个节点分别修改/etc/hosts和/etc/hostname
6:重启后关闭主节点外的各个节点:rabbitmqctl stop_app
7:其他节点加入集群:rabbitmqctl join_cluster rabbit@rabbitmq1
8:启动各个节点:rabbitmqctl start_app
9:查看集群信息:rabbitmqctl cluster_status
节点停止后可以直接重启,集群会自动加载

队列高可用

原理就是创建多一个镜像队列,默认,rabbitmq里的队列的内容位于队列声明所在的单个节点上。exchange和binding被认为在所有节点上的。当给队列做镜像后,相当于两个节点有一个队列的信息,默认是master节点起效果,当master崩溃,slave会自动提升为master,然后处理这个队列的消息。
队列镜像:
1:使用rabbitmqctl set_policy来设置,或者使用UI管理界面来设置
2:开启UI管理界面:rabbitmq-plugins enable rabbitmq_management
3:重启服务,然后访问ip:15672,用户名密码都是guest
4:在amind下面,右侧policy,添加一个policy,或者使用命令:
rabbitmqctl set_policy mypolicy "myReg"

使用java操作rabbtimq

以direct为例
1:引入依赖

    com.rabbitmq    amqp-client    5.6.0

2:生产者:

ConnectionFactory factory = new ConnectionFactory();//创建连接工厂factory.setHost("localhost");try (Connection connection = factory.newConnection(); //打开连接         Channel channel = connection.createChannel()) {               channel.queueDeclare(myQueueName, false, false, false, null);  //绑定一个队列String message = "Hello World!";channel.basicPublish("", myQueueName, null, message.getBytes()); 发送消息到队列里}

3:消费者:

ConnectionFactory factory = new ConnectionFactory();        factory.setHost("localhost");        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        channel.queueDeclare(myQueueName, false, false, false, null);DeliverCallback deliverCallback = (consumerTag, delivery) -> {        String message = new String(delivery.getBody(), "UTF-8");        System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
消息 队列 节点 信息 集群 地方 消费 服务 服务器 消费者 生产者 类型 路由 镜像 生产 管理 主机 只有 命令 多个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 鸠鸠互联网科技 高科技与互联网 凡科互联网科技 云电互联网科技 互联网科技博客 青海省互联网新科技 农村开互联网科技讲堂 深圳前海聚择互联网科技有限公司 济南华为互联网科技产业总部基地 互联网企业和科技型企业 搜狐科技互联网 中国科技创新与世界互联网大会 民营互联网公司国防科技 伊宁互联网科技做什么的 锡山区互联网智能科技产品供应 互联网金融科技公司的优势 35岁以上互联网科技行业 陕西彩京云互联网科技有限公司 互联网 科技节活动 微视频大赛 互联网巨头反垄断金融科技 互联网科技论文 互联网校园科技培训 南平创想时代互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 天津腾达互联网科技有限公司 迪庆互联网科技招生 云南省自由互联网科技有限公司 广州互联网高科技取餐柜 南京一网一红互联网科技有限公司
0