首页天道酬勤kafka和rabbitmq,mq集群模式

kafka和rabbitmq,mq集群模式

张世龙 05-12 07:58 94次浏览

RabbitMQ集群构建和Springboot整合的实践1 .下载2 .安装3 .配置4 .启动5.1集群构建5.1将从节点app5.2添加到关闭主节点5.3启动从节点app5.4 用户管理8 .权限管理9.1设置9.2清除使用9. 310.10.1maven依赖10.2 application.yml删除10.3生产者10.4消费者11 .问题11.1问题1 12 .扩展12.1节点参考文章

环境要求

jdk 1.8

节点角色172.30.20.250主节点172.30.20.251从节点172.30.20.252从节点1 .下载rabbit MQ-server https://www.rabbbit rabbit MQ-serverrabbitmq-server-3.6.15-1.el7.noarch.rpm Erlang 3358 packages.Erlang-solutions.com/Erlang-solutions-1.0-1.noarch.rpm2. rpm-ivhrabbitmq-server-3.6.15-1.el7.noarch.rpm3.配置CP/usr rara etc/rabbitMQ/rabbitMQ.config%%端口{tcp_listeners要将最后一个逗号去掉{loopback_users,请选择[]} 4.启动修复/etc/hosts 172.30.20.250 node 1172.30.20.251 node 2172.30.20.252 node 3同步. Erlang.cookies CP/var.Erlang.cookie 172 rabbitMQ/. Erlang.cookie 172.30.20 systemctlstartrabbitmq-server.servicesystemctlenablerabbitmq-server.service5.构建群集5.1 关闭后,从节点到tmqctljoin _ cluster---ram rabbit @ node 1另一个从节点到rabbitmqctljoin _ cluster---disc rabbbit @ node 1 内存节点/磁盘节点。在群集中,某些节点还可以配置为内存节点。 为了保证群集的高可用性,必须确保群集中有两个或多个磁盘节点,并且如果一个磁盘节点崩溃,群集可以访问外部。 5.3启动节点app rabbitmqctl start_app 5.4显示群集状态rabbitmqctlcluster _ status6.启动web管理插件的所有节点并启动rabbit MQ-pluginsenablerabbiter 用户管理默认用户名和密码为guest/查看guest用户:更改rabbitmqctl list_users密码: rabbitmqctlchange _ passwordusernamenewpassword新用户: rabbitmqctladd _ u u u userd 监视(monitoring )、策略创建(policymaker )、常规管理员(management )、 其他自定义名称rabbitmqctlset _ user _ tagsusernametag1tag2.删除用户: rabbitmqctldelete _ user username8.权限管理查看所有用户的权限rabbitmqctlete 显示的权限rabbitmqctllist _ user _ permissions username设置权限rabbitmqctlset _ permissions-pvhostpathusernameconf-patternwritern

Path] <username> 9. 镜像策略

普通模式:默认的集群模式。

镜像模式:把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。只有配置了此模式,才能在主节点宕机后,正常使用。

9.1 设置 策略结果all队列镜像到所有节点exactlyrabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition> 参数名称描述-p可选参数,针对指定 vhost 下的exchange或 queue–priority可选参数,policy 的优先级–apply-to可选参数,策略适用的对象类型,其值可为 “queues”, “exchanges” 或 “all”.默认是”all”namepolicy 的名称pattern匹配模式(正则表达式)definition镜像定义,json 格式,包括三部分(ha-mode,ha-params,ha-sync-mode)具体配置见下表

definition参数详情

参数名称描述ha-mode指名镜像队列模式,其值可为”all”,”exactly”或”nodes”,all:表示在集群所有节点上进行镜像;exactly:表示在指定个数的节点上镜像,节点个数由 ha-params 指定;nodes:表示在指定节点上进行镜像,节点名称通过ha-params 指定。ha-paramsha-mode模式需要用到的参数:exactly 模式下为数字表述镜像节点数,nodes 模式下为节点列表表示需要镜像的节点。ha-sync-mode镜像队列中消息的同步方式,其值可为”automatic”或”manually”.

例子:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' 9.2 清除 rabbitmqctl clear_policy [-p <vhost>] <name> 9.3 查看 rabbitmqctl list_policies [-p <vhost>] 10. 使用 10.1 maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency> 10.2 application.yml配置 spring: rabbitmq: # 集群节点 addresses: 172.30.20.250:5672,172.30.20.251:5672,172.30.20.252:5672 username: guest password: 123456 10.3 生产者 import org.springframework.amqp.core.AmqpTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.text.SimpleDateFormat;import java.util.Date;@Componentpublic class Producer {@Autowiredprivate AmqpTemplate rabbitTemplate;public void send() {String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());// 24小时制String context = "hello " + date;System.out.println("Producer : " + context); // demo 为队列名称this.rabbitTemplate.convertAndSend("demo", context);}} import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass RabbitmqDemoApplicationTests { @Autowired private Producer producer; @Test public void sendMessage() throws Exception { producer.send(); }} 10.4 消费者 import org.springframework.amqp.rabbit.annotation.RabbitHandler;import org.springframework.amqp.rabbit.annotation.RabbitListener;import org.springframework.stereotype.Component;@Component@RabbitListener(queues = "demo")public class Consumer {@RabbitHandlerpublic void process(String hello) {System.out.println("Consumer : " + hello);}} 11. 问题 11.1 问题1 11月 26 16:06:16 node1 systemd[1]: rabbitmq-server.service: main process exited, code=exited, status=1/FAILURE11月 26 16:06:17 node1 rabbitmqctl[40386]: Stopping and halting node rabbit@node111月 26 16:06:17 node1 rabbitmqctl[40386]: Error: unable to connect to node rabbit@node1: nodedown11月 26 16:06:17 node1 rabbitmqctl[40386]: DIAGNOSTICS11月 26 16:06:17 node1 rabbitmqctl[40386]: ===========11月 26 16:06:17 node1 rabbitmqctl[40386]: attempted to contact: [rabbit@node1]11月 26 16:06:17 node1 rabbitmqctl[40386]: rabbit@node1:11月 26 16:06:17 node1 rabbitmqctl[40386]: * connected to epmd (port 4369) on node111月 26 16:06:17 node1 rabbitmqctl[40386]: * epmd reports: node 'rabbit' not running at all11月 26 16:06:17 node1 rabbitmqctl[40386]: no other nodes on node111月 26 16:06:17 node1 rabbitmqctl[40386]: * suggestion: start the node11月 26 16:06:17 node1 rabbitmqctl[40386]: current node details:11月 26 16:06:17 node1 rabbitmqctl[40386]: - node name: 'rabbitmq-cli-15@node1'11月 26 16:06:17 node1 rabbitmqctl[40386]: - home dir: .11月 26 16:06:17 node1 rabbitmqctl[40386]: - cookie hash: Ij1egNr0lVU5H9TJmVAxfA==11月 26 16:06:17 node1 systemd[1]: Failed to start RabbitMQ broker.-- Subject: Unit rabbitmq-server.service has failed-- Defined-By: systemd-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel-- -- Unit rabbitmq-server.service has failed.

原因:

rabbitmq-server和erlang版本不匹配

解决方法:

卸载重装 12. 扩展 12.1 移除节点 rabbitmqctl stop_apprabbitmqctl resetrabbitmqctl start_app 参考文章

RabbitMQ安装及集群搭建

rabbitMq集群之镜像模式

SpringBoot 集成RabbitMQ集群及简单操作




有志者,事竟成。

搭建nginx负载均衡,nginx反向代理 java实现消息队列,rabbitmq集群模式