RabbitMq的基本认识和配置(一)
2019独角兽企业重金招聘Python工程师标准>>>
RabbitMq的基本认识和配置
什么是消息中间件
消息: 在应用之间传递的数据
消息中间件:Message Queue Middleware,简称MQ,是指利用高效可靠的消息机制进行与平台无关的数据交流,并基于数通信机制来进行分布式系统的集成。通过提供的消息传递和消息排队模型,它可以在分布式环境下拓张进程间的通信.
传递的模式: 1.点对点(P2P,Point-to-Point)
2.发布订阅模式(Pub/Sub)
- 消息中间件适用的方向: 适用于可靠的数据传输的分布式环境。能够在不同的平台下通信,屏蔽各个平台以及协议之间的特性,实现应用程序的链接,并且在任何时刻可以将消息进行传送或者存储转发,这比远程过程调用更加进步。
消息中间件的作用
解耦:在项目的启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入一个隐含的,基于数据的接口层,两边的处理过程都要实现这一个接口,这允许你独立的拓展或修改两边的处理过程,只要确保他们遵循同样的接口约束即可。
冗余(存储):有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到他们已经被完全处理,通过这一方式规避了数据丢失的风险。在把一个消息从消息中间件中删除之前,需要你的处理系统明确地指出这个消息被处理完成,从而确保你地数据被安全地保存知道你使用完毕。
扩展性:消息中间件解耦了应用地处理过程,所以提供了消息入队和处理地效率是很容易地,只需要另外增加处理过程即可,不需要改变代码,也不需要调节参数。
削峰:在访问量剧增地情况下,应用仍然需要继续发挥作用,但是这个月地突发流量的情况的不常见。
可恢复性:当系统一部分的组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合度。
顺序保证:在大所属使用场景下,数据处理顺序很重要,大部分消息中间件支持一定程度上的顺序性。
缓冲:在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过一个缓冲层来帮助任务最高效率的执行,写入消息中间件的处理会尽可能快速。
异步通信:在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步通信机制,允许应用把一些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理。
Rabbitmq安装
安装erlang
因为RabbitMQ采用Erlang语言编写的,所以需要配置erlang的环境,配置如下:
1.安装gcc和openssl模块
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
2.安装
yum -y install ncurses-devel
3.指定编译后程序的路径
./configure --prefix=/usr/erlang
4.编译安装
make
make install
5.配置环境变量
配置好之后使用source /etc/profile将该配置文件生效,生效之后输入erl回车可以看到:
安装完成erlang的环境之后,需要安装的就是rabiitmq了。
1.这里我下载的时rabbitmq-server-generic-unix-3.7.9.tar.xz,使用xz -d rabbitmq-server-generic-unix-3.7.9.tar.xz,tar -xvf rabbitmq-server-generic-unix-3.7.9.tar解压。
2.配置环境变量
vim /etc/profile
3.使用守护线程的模式启动rabbitmq
rabbitmq-server -detached
4.添加用户 rabbitmqctl add_user root root123 rabbitmqctl set_permissions -p / root "." "." ".*" rabbitmqctl set_user_tags root administrator
5.虽然已经启动了rabbitmq,但是后台管理还没有打开,需要使用下面的命令打开后台管理。
rabbitmqctl start_app
rabbitmq-plugins enable rabbitmq_management
此时还是有问题,需要关闭防火墙,systemctl stop firewalld.service
此时访问http://192.168.123.124:15672 登录后可以看到如下的界面:
到此为止我们就已经对rabbitmq有了基本认识,也能做些基本安装配置。
简单的例子:
1.导入依赖:
<dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.6.0</version></dependency></dependencies>
消息生产者:
public class DemoProducer {private static final String EXCHANGE_NAME = "exchange_demo";private static final String ROUNTING_KEY = "routingkey_demo";private static final String QUEUE_NAME = "queue_demo";private static final String IP_ADDRESS = "192.168.124.129";private static final int PORT = 5672;public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost(IP_ADDRESS);factory.setPort(PORT);factory.setUsername("root");factory.setPassword("root@123");//创建链接Connection connection = factory.newConnection();//创建信道Channel channel = connection.createChannel();channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, null);//创建一个持久化,非排他的,非自动删除的的队列channel.queueDeclare(QUEUE_NAME, true, false, false, null);//将交换器与队列通过路由键绑定channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUNTING_KEY);//发送一条持久化的消息:hello world;String message = "hello world";channel.basicPublish(EXCHANGE_NAME, ROUNTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());//关闭资源channel.close();connection.close();}}
消息消费者:
public class ConsumerDemo {private static final String EXCHANGE_NAME = "exchange_demo";private static final String ROUNTING_KEY = "routingkey_demo";private static final String QUEUE_NAME = "queue_demo";private static final String IP_ADDRESS = "192.168.124.129";private static final int PORT = 5672;public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {Address[] addresses = new Address[]{new Address(IP_ADDRESS, PORT)};ConnectionFactory factory = new ConnectionFactory();factory.setHost(IP_ADDRESS);factory.setPort(PORT);factory.setUsername("root");factory.setPassword("root@123");//这里的链接方式和生产者的链接链接方式有所不同,需要区别对待Connection connection = factory.newConnection(addresses);//创建信道final Channel channel = connection.createChannel();//设置客户端最多接收为被ack的消息个数channel.basicQos(64);Consumer consumer = new DefaultConsumer(channel) {[@Override](https://my.oschina.net/u/1162528)public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("recv message:" + new String(body));try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}channel.basicAck(envelope.getDeliveryTag(), false);}};channel.basicConsume(QUEUE_NAME, consumer);TimeUnit.SECONDS.sleep(5);channel.close();connection.close();}}
执行结果:
转载于:https://my.oschina.net/u/3474937/blog/3008325
RabbitMq的基本认识和配置(一)相关推荐
- Windows下RabbitMQ安装,部署,配置
安装部署 1.当前环境以及参考资料出处 部署环境:windows server 2008 r2 enterprise 官方安装部署文档:http://www.rabbitmq.com/install- ...
- (四)RabbitMQ消息队列-服务详细配置与日常监控管理
(四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...
- rabbitmq集群部署及配置
rabbitmq集群部署及配置 文章目录 rabbitmq集群部署及配置 前言 一.原理介绍 二.部署方案 1.环境介绍 2.部署过程 小结 前言 消息中间件rabbitmq,一般以集群方式部署,主要 ...
- RabbitMQ消息队列之一:RabbitMQ的环境安装及配置
RabbitMQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们 ...
- RabbitMQ 高级指南:从配置、使用到高可用集群搭建
博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...
- RabbitMQ高级指南:从配置、使用到高可用集群搭建
本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...
- RabbitMQ 下载、安装、配置、验证_rpm版本(Linux环境)
文章目录 一.RabbitMQ 安装准备 二.RabbitMQ 安装 2.1. 环境安装(最小化版本先安装环境) 2.2. 安装包下载 2.3. rpm安装RabbitMQ 2.4. 配置文件修改 2 ...
- 亲测可用,超详细RabbitMQ消息队列集群配置
RabbitMQ是什么? MQ(Message Queue,消息队列)消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息同步. 原理介绍 rabbitmq是依据erlan ...
- 详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!
作者:kosamino cnblogs.com/jing99/p/11679426.html 一.MQ用途 1.同步变异步消息 场景:用户下单完成后,发送邮件和短信通知. 运用消息队列之后,用户下单完 ...
最新文章
- 页面分享怎么知道通过哪条链接进来的_如何制作微信图文链接
- java user directory,Java ProcessBuilder directory()方法与示例
- 必看2019年学员信息系统项目管理师长篇备考经验
- 数据 正则化 python_python3.6怎么单独正则化/标准化DataFrame中的指定列数据
- Develop系列-API Guides-简介-应用基础
- 库克:苹果商店收取30%佣金是应该的
- python大数据招聘信息_2017招聘大数据丨Python需求增速达174%,AI人才缺口超百万!...
- CSDN Cookbook by Eric
- [Ubuntu] 使用 fcitx 输入汉字
- Android短信页面
- linux的users命令,linux users命令详解
- Matlab 多行屏蔽或注释方法
- win10开机字体变大bug
- 年、月、日格式正则表达式
- cesium 根据SampledPositionProperty与timeline实现轨迹回放功能(跟随视角、上帝视角) 详细代码与理解记录
- Android:浏览图片,点击放大至全屏效果
- 【Javaweb】基础开发流程与介绍
- 女程序媛的神奇修仙路
- @2022-02-22:每日一语
- 深度学习实例第二部分:OpenCV
热门文章
- You have new mail in /var/spool/mail/root 解决方法
- Bootstrap学习(一):Bootstrap简介
- exchange 2010 无人值守安装
- kernel.sem信号量参数调优,以及ipcs信号量队列查询
- linux下多线程的创建与等待详解 【转载】
- 微软12月补丁星期二值得关注的6个0day及其它
- 俄罗斯被指为 SolarWinds 供应链事件元凶,技术公司受制裁,常用5大漏洞遭曝光...
- FireEye动态:SolarWinds Orion 新 0day用于安装SUPERNOVA
- NVIDIA 修复 GPU 驱动中的多个代码执行缺陷
- 关于oracle数据恢复