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分布式集群搭建示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java分布式集群电商平台搭建文档demo,环境集群搭建dubbo、rabbitMQ 、redis 集群、mysql集群 、nginx负载、tomcat、zookeeper集群、maven项目构建示例
通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。 这些节点通过 RabbitMQ HA 队列(镜像队列...
消息中简介Rabbitmq集群搭建,详细介绍了如何进行集群的搭建
ansible-role-rabbitmq 从RabbitMQ存储库安装RabbitMQ的角色。 在上可用 Ansible Galaxy: Travis版本: 兼容性 兔子MQ 3.6.x 好的 3.7.x 好的 > 3.7 未测试 埃尔朗 20倍 好的 21倍 好的 22倍 KO [1] 分配 ...
netty集群+分布式netty搭建,项目使用 springboot nacos gateway redis rabbitmq,对应教程帖:https://blog.csdn.net/a1053765496/article/details/128063700
项目讲解、环境搭建 后台系统功能实现 前台系统搭建、实现、内容管理系统实现 Redis入门 单点登录系统 订单系统、Quartz入门 Solr入门以及搜索系统实现 MQ学习、改造搜索、商品详情缓存逻辑 实现购物车、读写分离 ...
从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在disconf配置中心的应用 基于Zookeeper Watcher 核心机制深入源码分析 Zookeeper集群升级、迁移 基于Zookeeper实现分布式服务器动态上下线感知 深入...
用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 AMQP,即Advanced message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件...
谷粒商城学习完成版pdf笔记,微服务分布式电商项目。主要包含SpringBoot,微服务介绍,项目搭建,vue讲解,webpack,elasticsearch,RabbitMQ,用户注册,授权,支付等操作具体细节见文档。
谷粒商城分为三个部分:分布式基础、分布式高级、高可用集群部署分布式基础篇:使用SpringBoot+Vue+逆向工程搭建全套后台管理系统,使用前后分离方式,以商品系统为例,手把手教大家进行全栈开发。分布式高级篇:...
│ 12zookeeper集群搭建_.wmv │ 13.solr集群的搭建.avi │ 13_solr集群搭建.wmv │ 14_搜索服务切换到集群版.wmv │ 15.课后作业-索引库商品同步.avi │ 15_商品同步作业.wmv │ 打开必读.txt │ 淘淘商城第八天...
springboot+Mybatis-plus搭建 redis、zookeeper、mq集群 redis缓存、jetCache缓存 RabbitMq消息通知、死信、延迟队列使用 zookeeper分布式锁 自定义注解 统一封装返回 切面使用 设计模式使用 事物、回滚使用 docker...
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控 16.Spring Cloud中声明式服务调用Feign 17.Spring Cloud中Feign的继承特性 18.Spring Cloud中Feign配置详解 19.Spring Cloud中的API网关服务Zuul 20.Spring ...
搭建项目,JSR303 做校验器,MyBatis持久层框架。 中间件使用了消息队列RabbitMQ进行异步下单;使用Redis进行资源缓存以及实现分布式Session;Druid连接池。 使用关系型数据库MySQL。 使用Tomcat服务器集群以及AWS...
CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务: https://segmentfault.com/a/1190000010702020 Spring Boot 中使用 RabbitMQ: https://segmentfault.com/a/1190000011577243 4)断路器模式源于Martin Fowler的...