`
hpgary
  • 浏览: 82018 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Rabbitmq 分布式集群环境搭建

 
阅读更多

 1、MQ

 

       MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。

2、安装

http://www.rabbitmq.com/download.html 选择通用二进制办解压安装

4、启动

sbin/rabbitmq-server -detached

 5、启用web管理界面

sbin/rabbitmq-plugins enable rabbitmq_management

 web访问: http://IP:15672/

6、设置账号密码

 

# 删除guest账号
sbin/rabbitmqctl delete_user guest
# 新增管理账号 admin
sbin/rabbitmqctl add_user admin 123456
# 设置admin为超级管理员
sbin/rabbitmqctl set_user_tags admin administrator
# 查看当前用户角色列表
 sbin/rabbitmqctl list_users 

 7、Java 客户端代码

a、加入Jar包

<dependency>
	        <groupId>com.rabbitmq</groupId>
	        <artifactId>amqp-client</artifactId>
	        <version>3.0.4</version>
	</dependency>

 

b、生成着代码

import java.io.IOException;  
  
import com.rabbitmq.client.Channel;  
import com.rabbitmq.client.Connection;  
import com.rabbitmq.client.ConnectionFactory;  
  
public class Send {  
    private final static String QUEUE_NAME = "hello";  
  
    public static void main(String[] args) throws IOException {  
        ConnectionFactory factory = new ConnectionFactory();  
        factory.setHost("10.0.0.104");  
        factory.setUsername("rabbitmq");
        factory.setPassword("123456"); 
        factory.setPort( 5672); 
        Connection connection = factory.newConnection();  
        Channel channel = connection.createChannel();  
        // 这里第二个参数是指消息是否持久化,持久化传递true,这里和消费者保持一致
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        
        for(int x=0;x<20;x++){
	        String message = "Hello World!";  
	        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());  
	        System.out.println(" [x] Sent '" + message + "'");  
        }
        channel.close();  
        connection.close();  
    }  
}  

 c、消费者代码

import com.rabbitmq.client.AMQP.BasicProperties;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;  
   
  
public class Reqv {  
    private final static String QUEUE_NAME = "hello";  
  
    public static void main(String[] argv) throws Exception {  
  
        ConnectionFactory factory = new ConnectionFactory();  
        factory.setHost("10.0.0.104");  
        factory.setUsername("rabbitmq");
        factory.setPassword("123456"); 
        Connection connection = factory.newConnection();  
        Channel channel = connection.createChannel();  
        // 这里第二个参数是指消息是否持久化,持久化传递true,这里和生产者保持一致
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);  
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");  
  
         DefaultConsumer consumer = new DefaultConsumer(channel){
        	
        	@Override
        	public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
        			throws IOException {
        		System.out.println(" [m] Received '" + new String(body, "UTF-8") + "'" ); 
        	}
        };
        boolean autoAck = true;
        
        channel.basicConsume(QUEUE_NAME, autoAck, consumer);
    }  
}  

8、spring boot amqp 

a、引入Jar包

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

b、配置文件:

spring:
    rabbitmq:
      host: 10.0.0.104
      port: 5672
      username: admin
      password: 123456

  

c、生产者代码

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MessageQueueService {
	@Autowired
	private RabbitTemplate rabbitTemplate;
	public void send(String msg) {
		System.out.println("Sender : " + msg);
		rabbitTemplate.convertAndSend( "hello" , msg);
	}
	
}

d、消费者代码:

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = { "hello" } ) 
public class ReceiverQueue {
	@RabbitHandler
	public void process(String hello) {
		System.out.println("Receiver : " + hello);
	}
}

 

 

9、如果提示没有权限,进入web管理界面,选择Admin,将来Can access virtual hosts列设置成,当然也可以根据目录结构控制权限



 

10、rabbitmq 分布式搭建

a、准备两台机器server1和server2 或者docker环境,两台机器上都安装上面服rabbitmq,然后运行命令

两台机器都要启动rabbitmq

#停止rabbitmq应用,并不是server
sbin/rabbitmqctl stop_app
#链接server1
sbin/rabbitmqctl join_cluster rabbit@server1
# 这里可能会提示下面错误
Error: unable to connect to nodes [rabbit@rabbitmqmaster]: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@rabbitmqmaster]

rabbit@rabbitmqmaster:
  * connected to epmd (port 4369) on rabbitmqmaster
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed

  * Authentication failed (rejected by the remote node), please check the Erlang cookie


current node details:
- node name: 'rabbitmq-cli-88@rabbitmqsalver2'
- home dir: /root
- cookie hash: 55WeQTsiv71JcEDq/JcE9Q==

找到home dir 下面的.erlang.cookie,这里的是 /root/.erlang.cookie 讲将两台机器的该文件内容保持一致,再次运行该命令成功。

# 查看集群状态
sbin/rabbitmqct cluster_status

 11、命令设置账号可权限

#设置
sbin/rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#查看权限
sbin/rabbitmqctl list_permissions

 

 

  • 大小: 19 KB
分享到:
评论

相关推荐

    Centos7.3 RabbitMQ分布式集群搭建示例

    本篇文章主要介绍了Centos7.3 RabbitMQ分布式集群搭建示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    rabbitmq集群环境搭建

    #### 二、RabbitMQ集群搭建步骤详解 ##### 1. 安装依赖文件 在进行RabbitMQ集群部署前,需要确保服务器上已安装必要的依赖包。这些依赖包括但不限于`gcc`、`glibc-devel`等开发工具以及`openssl-devel`等库文件。 ...

    分布式集群电商平台搭建方案 代码

    分布式集群电商平台搭建方案 在构建大型的电商平台时,分布式集群技术是不可或缺的组成部分。它能够提高系统的可扩展性、容错性和性能,确保在高并发访问下也能稳定运行。本方案将详细介绍如何使用Java实现一个...

    分布式集群电商平台搭建方案

    java分布式集群电商平台搭建文档demo,环境集群搭建dubbo、rabbitMQ 、redis 集群、mysql集群 、nginx负载、tomcat、zookeeper集群、maven项目构建示例

    rabbitmq3.6.9集群搭建.doc

    通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。   这些节点通过 RabbitMQ HA 队列(镜像队列...

    RabbitMq 集群搭建linux

    为了搭建一个可靠的RabbitMQ集群,首先需要确保所有的服务器节点都处于相同的网络环境中,并且具有稳定的网络连接。根据提供的信息,本实验环境如下: - **操作系统**:CentOS 7.2 - **节点列表**: - IP地址:192...

    消息中简介Rabbitmq集群搭建

    **RabbitMQ 集群搭建详解** 在分布式系统中,消息队列(RabbitMQ)是一种重要的组件,它用于解耦应用之间的通信,提高系统的可扩展性和容错性。RabbitMQ 是基于 AMQP(Advanced Message Queuing Protocol)的开源消息...

    RabbitMQ集群搭建及使用.docx

    1. **环境准备**:确保所有参与集群的服务器都已安装了 RabbitMQ。每个服务器上的实例应能正常启动。RabbitMQ 的配置文件 `.erlang.cookie` 必须在所有节点上保持一致,以便它们之间能够进行通信。这个文件通常位于 ...

    RabbitMQ高可用集群部署1

    一般模式集群搭建步骤** 在搭建RabbitMQ高可用集群时,通常需要准备多台服务器,例如这里提到的三台虚拟机。以下是一般步骤: - **准备工作**: 确保所有节点的RabbitMQ服务已正确安装并可以正常运行,可以通过`...

    HA+keepalived+rabbitMq镜像集群安装手册软件

    总的来说,这个压缩包提供了一个完整的流程,从安装Erlang、RabbitMQ,到构建镜像集群,再到配置HAProxy和Keepalived,最后到管理RabbitMQ的服务,覆盖了搭建高可用RabbitMQ集群的全过程。每个步骤都需要仔细理解和...

    Rabbitmq的安装和集群的搭建

    总之,RabbitMQ的安装和集群搭建是一个需要细心操作的过程,涉及到对RabbitMQ架构的理解以及对Erlang运行环境的配置。同时,管理插件的使用也是保障集群稳定运行的一个重要方面,熟练掌握相关命令和管理工具对于运维...

    分布式环境搭建.pdf

    【分布式环境搭建】是互联网行业中不可或缺的一环,随着业务量的急剧增长,单体系统已经无法满足需求,因此需要将大型项目拆分成多个独立的系统。这些系统之间的协同工作成为了新的挑战,分布式环境的构建正是解决这...

    RabbitMQ集群搭建指南:提升企业消息系统的效能与稳定性

    【RabbitMQ集群搭建指南】 在企业IT架构中,消息队列(MQ)扮演着至关重要的角色,它能够实现异步处理、解耦系统组件、提高系统吞吐量。RabbitMQ作为开源MQ的佼佼者,凭借其高效、稳定和易扩展的特性,广泛应用于...

    RabbitMQ实战:高效部署分布式消息队列

    在分布式部署方面,书里会涵盖集群的搭建,这是确保RabbitMQ高可用性的重要手段。通过创建集群,可以实现数据的复制和故障转移,从而避免单点故障。此外,还会讨论如何设置镜像队列,进一步提高数据的安全性和一致性...

    RabbitMQ实战 高效部署分布式消息队列pdf

    - **集群搭建**:通过多台服务器构建RabbitMQ集群,实现高可用性和故障转移。 5. **分布式消息队列** - **分布式消息队列的优势**:提高系统性能,通过异步处理减轻后端服务压力;增强系统容错性,消息持久化避免...

    安装rabbitmq步骤文档

    本篇文档将详细介绍如何在Linux环境下安装RabbitMQ。为了确保安装过程顺利进行,首先需要完成以下准备工作: 1. **操作系统**:本教程适用于大多数基于Red Hat的Linux发行版,如CentOS、Fedora等。 2. **依赖包**:...

    ansible-role-rabbitmq:提供和安装RabbitMQ节点和_或集群的角色

    ansible-role-rabbitmq 从RabbitMQ存储库安装RabbitMQ的角色。 在上可用 Ansible Galaxy: Travis版本: 兼容性 兔子MQ 3.6.x 好的 3.7.x 好的 &gt; 3.7 未测试 埃尔朗 20倍 好的 21倍 好的 22倍 KO [1] 分配 ...

    RabbitMQ集群原理介绍.docx

    由于Erlang语言本身的分布式特性,使得RabbitMQ天然支持集群部署,这不仅能够提升系统的可用性和容错能力,还能通过水平扩展来增加系统的消息吞吐量。 ##### 1.1 集群架构概述 RabbitMQ集群由多个节点组成,每个...

Global site tag (gtag.js) - Google Analytics