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
相关推荐
本篇文章主要介绍了Centos7.3 RabbitMQ分布式集群搭建示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
#### 二、RabbitMQ集群搭建步骤详解 ##### 1. 安装依赖文件 在进行RabbitMQ集群部署前,需要确保服务器上已安装必要的依赖包。这些依赖包括但不限于`gcc`、`glibc-devel`等开发工具以及`openssl-devel`等库文件。 ...
分布式集群电商平台搭建方案 在构建大型的电商平台时,分布式集群技术是不可或缺的组成部分。它能够提高系统的可扩展性、容错性和性能,确保在高并发访问下也能稳定运行。本方案将详细介绍如何使用Java实现一个...
java分布式集群电商平台搭建文档demo,环境集群搭建dubbo、rabbitMQ 、redis 集群、mysql集群 、nginx负载、tomcat、zookeeper集群、maven项目构建示例
通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。 这些节点通过 RabbitMQ HA 队列(镜像队列...
为了搭建一个可靠的RabbitMQ集群,首先需要确保所有的服务器节点都处于相同的网络环境中,并且具有稳定的网络连接。根据提供的信息,本实验环境如下: - **操作系统**:CentOS 7.2 - **节点列表**: - IP地址:192...
**RabbitMQ 集群搭建详解** 在分布式系统中,消息队列(RabbitMQ)是一种重要的组件,它用于解耦应用之间的通信,提高系统的可扩展性和容错性。RabbitMQ 是基于 AMQP(Advanced Message Queuing Protocol)的开源消息...
1. **环境准备**:确保所有参与集群的服务器都已安装了 RabbitMQ。每个服务器上的实例应能正常启动。RabbitMQ 的配置文件 `.erlang.cookie` 必须在所有节点上保持一致,以便它们之间能够进行通信。这个文件通常位于 ...
一般模式集群搭建步骤** 在搭建RabbitMQ高可用集群时,通常需要准备多台服务器,例如这里提到的三台虚拟机。以下是一般步骤: - **准备工作**: 确保所有节点的RabbitMQ服务已正确安装并可以正常运行,可以通过`...
总的来说,这个压缩包提供了一个完整的流程,从安装Erlang、RabbitMQ,到构建镜像集群,再到配置HAProxy和Keepalived,最后到管理RabbitMQ的服务,覆盖了搭建高可用RabbitMQ集群的全过程。每个步骤都需要仔细理解和...
总之,RabbitMQ的安装和集群搭建是一个需要细心操作的过程,涉及到对RabbitMQ架构的理解以及对Erlang运行环境的配置。同时,管理插件的使用也是保障集群稳定运行的一个重要方面,熟练掌握相关命令和管理工具对于运维...
【分布式环境搭建】是互联网行业中不可或缺的一环,随着业务量的急剧增长,单体系统已经无法满足需求,因此需要将大型项目拆分成多个独立的系统。这些系统之间的协同工作成为了新的挑战,分布式环境的构建正是解决这...
【RabbitMQ集群搭建指南】 在企业IT架构中,消息队列(MQ)扮演着至关重要的角色,它能够实现异步处理、解耦系统组件、提高系统吞吐量。RabbitMQ作为开源MQ的佼佼者,凭借其高效、稳定和易扩展的特性,广泛应用于...
在分布式部署方面,书里会涵盖集群的搭建,这是确保RabbitMQ高可用性的重要手段。通过创建集群,可以实现数据的复制和故障转移,从而避免单点故障。此外,还会讨论如何设置镜像队列,进一步提高数据的安全性和一致性...
- **集群搭建**:通过多台服务器构建RabbitMQ集群,实现高可用性和故障转移。 5. **分布式消息队列** - **分布式消息队列的优势**:提高系统性能,通过异步处理减轻后端服务压力;增强系统容错性,消息持久化避免...
本篇文档将详细介绍如何在Linux环境下安装RabbitMQ。为了确保安装过程顺利进行,首先需要完成以下准备工作: 1. **操作系统**:本教程适用于大多数基于Red Hat的Linux发行版,如CentOS、Fedora等。 2. **依赖包**:...
ansible-role-rabbitmq 从RabbitMQ存储库安装RabbitMQ的角色。 在上可用 Ansible Galaxy: Travis版本: 兼容性 兔子MQ 3.6.x 好的 3.7.x 好的 > 3.7 未测试 埃尔朗 20倍 好的 21倍 好的 22倍 KO [1] 分配 ...
由于Erlang语言本身的分布式特性,使得RabbitMQ天然支持集群部署,这不仅能够提升系统的可用性和容错能力,还能通过水平扩展来增加系统的消息吞吐量。 ##### 1.1 集群架构概述 RabbitMQ集群由多个节点组成,每个...