配置两台Linux CentOS 6.7虚拟主机

CentOS6.7下载地址
https://pan.baidu.com/s/1i5GPg9n
 
安装视频下载

https://pan.baidu.com/s/1qYSgohQ

rabbitmq2
rabbitmq1

1、分别在两台主机上修改/etc/hosts
192.168.169.100 rabbitmq1
192.168.169.110 rabbitmq2
 
2、从客户端上传RPM包

RPM包下载地址
https://pan.baidu.com/s/1dE1iaGx
 

3、下载阿里云Yum源

#wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo

依次安装Erlang,Rabbitmq
#yum
-y install openssl
#yum -y install socat-1.7.2.4-1.el6.rf.x86_64.rpm
#yum -y install erlang-17.4-1.el6.x86_64.rpm
#yum -y install rabbitmq-server-3.6.3-1.noarch.rpm
4、启动rabbitmq1,rabbitmq2上的RabbitMQ
rabbitmq1
#service rabbitmq-server start
rabbitmq2
#service rabbitmq-server start
5、从rabbitmq1主机上拷贝文件到rabbitmq2
scp /var/lib/rabbitmq/.erlang.cookie  rabbitmq2:/var/lib/rabbitmq
6、在rabbitmq1,rabbitmq2上分别关闭防火墙
[root@rabbitmq1 ~]#
service iptables stop
[root@rabbitmq2 ~]#
service iptables stop
7、在rabbitmq1,rabbitmq2上分别启动RibbitMQ
[root@rabbitmq1 ~]# service rabbitmq-server
start
[root@rabbitmq2 ~]# service rabbitmq-server
start
 
8、在rabbitmq2上执行
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
9、查看各节点上的状态
rabbitmqctl cluster_status
 
10、在rabbitmq1,rabbitmq2节点上分别添加用户和设置控制台插件
 
[root@rabbitmq1 ~]# rabbitmq-plugins
enable rabbitmq_management
 
[root@rabbitmq1 ~]# rabbitmqctl add_user
admin admin
 
[root@rabbitmq1 ~]# rabbitmqctl
set_permissions admin ".*" ".*" ".*"
 
[root@rabbitmq1 ~]# rabbitmqctl
set_user_tags admin administrator
 
[root@rabbitmq2 ~]# rabbitmq-plugins
enable rabbitmq_management
 
 

11、在rabbitmq1节点上安装haproxy

yum -y install
haproxy
12、配置haproxy
cp /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg
添加配置信息

listen rabbitmq_local_cluster
192.168.169.100:5670 
mode
tcp 
balance
roundrobin 
server
rabbit 192.168.169.100:5672 check inter 5000 rise 2 fall
3
server
rabbit 192.168.169.110:5672 check inter 5000 rise 2 fall
listen private_monitoring :8100 
mode
http 
option
httplog 
stats
enable 
stats
uri /stats 
stats
refresh 60s

13、启动haproxy

service haproxy start
14、查看haproxy控制台
http://192.168.169.142:8100/stats
15、建立RabbitMQ策略

16、建立持久队列
 
 
测试代码
Producer.java
package com.test.cluster;
 
import com.rabbitmq.client.*;
 
import java.io.IOException;
import java.lang.String;
import java.lang.System;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Producer {
 
    public static void
main(String[] args) throws Exception {
   
    //使用默认端口连接MQ
     
  ConnectionFactory factory = new
ConnectionFactory();
   
factory.setUsername("admin");
   
factory.setPassword("admin");
     
  factory.setHost("192.168.169.100");
//使用默认端口5672
     
  factory.setPort(5670);
     
  Connection conn = factory.newConnection();
//声明一个连接
     
  Channel channel = conn.createChannel();
//声明消息通道
   
     
  String exchangeName = "TestEXG";//交换机名称
     
  String routingKey =
"RouteKey1";//RoutingKey关键字
     
  channel.exchangeDeclare(exchangeName, "direct",
true);//定义声明交换机
     
  String queueName = "ClusterQueue";//队列名称
     
  Map arg = new HashMap();
     
  arg.put("x-ha-policy", "all");
     
  channel.queueDeclare(queueName, false, false,
false, arg);
 
     
  channel.queueBind(queueName, exchangeName,
routingKey);//定义声明对象
     
  
     
  byte[] messageBodyBytes = "Hello,
world!".getBytes();//消息内容
     
  channel.basicPublish(exchangeName, routingKey,
null, messageBodyBytes);//发布消息
     
  //关闭通道和连接
channel.close();
conn.close();
    }
 
}
 
 
Customer.java
 
package com.test.cluster;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
//通过channel.basicAck向服务器发送回执,删除服务上的消息
public class Consumer {
 
    public static void
main(String[] args) throws IOException, InterruptedException
{
     
  ConnectionFactory factory = new
ConnectionFactory();
   
factory.setUsername("admin");
   
factory.setPassword("admin");
     
  factory.setHost("192.168.169.100");
//使用默认端口5672
     
  factory.setPort(5670);
     
  Connection conn = factory.newConnection();
//声明一个连接
     
  Channel channel = conn.createChannel();
//声明消息通道
     
  String exchangeName = "TestEXG";//交换机名称
     
  String queueName = "ClusterQueue";//队列名称
     
  channel.exchangeDeclare(exchangeName, "direct",
true);//定义声明交换机
     
  channel.queueBind(queueName, exchangeName,
"RouteKey1");
 
     
  channel.basicQos(1); //server push消息时的队列长度
 
     
  //用来缓存服务器推送过来的消息
     
  QueueingConsumer consumer = new
QueueingConsumer(channel);
 
     
  channel.basicConsume(queueName, false,
consumer);
 
     
  while (true) {
     
     
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
     
     
System.out.println("Received " + new
String(delivery.getBody()));
 
     
     
//回复ack包,如果不回复,消息不会在服务器删除
     
     
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),
false);
     
  }
    }
}
 
关闭掉其中一个RabbitMQ,测试群集效果
 

12.RabbitMQ多机集群的更多相关文章

  1. Linux源码安装RabbitMQ高可用集群

    1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...

  2. RabbitMQ安装以及集群部署

    本次记录安装RabbitMQ的过程,只针对MAC下单机版安装.单机集群安装方法以及配置haproxy负载均衡. RabbitMQ单机版本安装 RabbitMQ单机集群安装方法(适合开发练习) Rabb ...

  3. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  4. RabbitMQ安装、集群搭建、概念解析

    RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...

  5. RabbitMQ介绍5 - 集群

    RabbitMQ内建集群机制,利用Erlang提供的开放电信平台(OTP,Open telecom Platform)通信框架,使得集群很容易进行横向扩展,提高系统吞吐量.这里只讨论集群的概念.原理, ...

  6. docker1.12 安装redis第三方集群方案 codis

    docker1.12 安装redis第三方集群方案 codis

  7. Jmeter5 实现多机集群压测(局域网组成多机集群)

    想要模拟高并发用户访问的场景,用Jmeter5实现的话,单靠一台PC机,资源是不够的,包括单机的内存.使用端口数量等,所以最好是通过多台PC机组成几个集群来对服务器进行压测. 本文目录: 1.软硬件配 ...

  8. Elasticsearch5.5 多机集群配置和x-pack安装配置

    x-pack安装配置 https://www.elastic.co/guide/en/elasticsearch/reference/current/installing-xpack-es.html ...

  9. redis多机集群部署文档

    redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 ...

随机推荐

  1. [CSP-S模拟测试ex]题解

    爆零了.少特判见祖宗.还好这场不计入总分. 考场上什么都没想.感觉考试状态又回到了两个月前. A.Antipalindrome 手玩样例,不难发现题目中要求的合法串的充要条件是:对于任意$i \in ...

  2. elementUI中input输入框,强制输入数字,并限制输入长度

    <el-input v-model="item.userScore" onkeyup="this.value=this.value.replace(/[^\d.]/ ...

  3. java com.db4o 类

    <!--juan_zhai--> <dependency> <groupId>com.db4o</groupId> <artifactId> ...

  4. java BufferSegment

    package org.rx.util; import java.util.function.Consumer; import static org.rx.core.Contract.require; ...

  5. Struts1.3——DispatchAction、DynamicForm和全局跳转

    1.DispatchAction-分派Action 1.1 为什么需要DispatchAction 如果每个请求都对应一个Action,就会造成action过多,程序显得比较臃肿,所以可以把一类请求写 ...

  6. (转)SQL Server 2012 手动安装帮助文档+排错

    逆天SQL Server 2012装的不要不要的,最后发现...竟然没帮助文档...汗啊!原来它跟vs一样要自己装帮助文档...好吧,官网一下载,妹的...报错...然后就让我们还原这个安装过程以及逆 ...

  7. Java泛型方法和构造函数

    可以在方法声明中定义类型参数,它们在方法的返回类型之前的尖括号中指定.包含泛型方法声明的类型不必是通用类型.可以在非静态方法声明中使用为泛型类型指定的类型参数. 示例 以下代码显示如何为方法m1()定 ...

  8. Java并发编程教程

    Java是一种多线程编程语言,我们可以使用Java来开发多线程程序. 多线程程序包含两个或多个可同时运行的部分,每个部分可以同时处理不同的任务,从而能更好地利用可用资源,特别是当您的计算机有多个CPU ...

  9. Dayjs处理时间函数的插件

    现在很多处理时间格式化的插件,我平时项目中最常用的便是Dayjs这个插件,我觉得这个插件还是很好用的.现在说一下这个插件的基本使用. Dayjs并没有覆盖Javascript原生的Date.proto ...

  10. Vue篇1

    2019 Vue 面试题汇总(持续更新中...) 1. vue中的MVVM模式 即Model-View-ViewModel. Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,D ...