RabbitMQ|异步

我们日常生活中肯定遇到“分身乏术”的情况,在出现这种情况时我们肯定只能按部就班一件一件事情来处理,这样就会浪费一些不必要的时间,如在书写作业的时候我们只有在写完一门课作业后才能去完成另外一门的作业。但在计算机中这个问题在一定程度上被很好的解决,这就是使用异步的思想,本文就来论述这个问题。

1 概念|异步

提到异步很自然就会想到同步。

1.1 同步与异步

二者都是一种通讯方式,关注的是消息通信机制 (synchronous communication/ asynchronous communication)。

(1)同步

使用某个东西时,调用方得等待这个调用返回结果才能继续执行。

(2)异步

调用方不会处于等待状态去等待结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。

1.2 比喻

  • 同步:咱们线下去商城买东西,看上一个东西,店家就去拿货,而在拿货这段时间(不长的时间)咱们只能在店里等着,不能离开。
  • 异步:咱们线上买东西,手机app下单后就可以做其他的事情(学习、游戏),等货到了咱们去签收就好了。

上面的过程,我们可以将买东西 看出是咱们的次业务,而其他事情是我们的主业务, 那么我们要提高效率肯定需要将将次业务从主业务分离(计算机中为解耦 )出来,这样就引出了生产者消费者设计模式

2 生产者消费者设计模式

寻找中间人(broker)搭桥,保证两个业务没有直接关联。这种解耦方式为:生产者消费者设计模式。如下图:



即:生产者生成消息,缓存到消息队列中,消费者读取消息队列中的消息并执行。这其中消息队列是关键。

咱们可以把消息队列看作是消息在传输的过程中保存消息的容器

3 RabbitMQ介绍

现在主流消息队列有:RabbitMQ、ActiveMQ、Kafka等等。

3.1 主流消息队列比较:

(1)RabbitMQ和ActiveMQ比较

  • 系统吞吐量:RabbitMQ好于ActiveMQ
  • 持久化消息:RabbitMQ和ActiveMQ都支持
  • 高并发和可靠性:RabbitMQ好于ActiveMQ

(2)RabbitMQ和Kafka:

  • 系统吞吐量:RabbitMQ弱于Kafka
  • 可靠性和稳定性:RabbitMQ好于Kafka比较
  • 设计初衷:Kafka是处理日志的,是日志系统,所以并没有具备一个成熟MQ应该具备的特性。

3.2 RabbitMQ安装(mac电脑下)

本次安装笔者走了很多弯路,回过头来集中的问题出在用终端命令始终无法从github上下载RabbitMQ的环境压缩包,且网上教程也多是使用终端来下载,为此耽误了很长的时间,下面介绍下我的方法。

(1)rabbitmq-server-generic-unix-3.8.3.tar.xz下载

网址:https://www.rabbitmq.com/install-generic-unix.html#downloads

选择下图的位置进行下载:

(2)移动手动下载好的文件到文件目录

  • 复制下载好的文件
  • 访达-前往-前往文件夹:输入~/Library/Caches/Homebrew进入这个目录
  • 打开后将看到“downloads”目录,里面就是安装依赖时下载的缓存文件,downloads文件夹同层级外面是downloads里面的文件替身
  • 此时将之前下载好的文件粘贴到dowanloads目录下。

  • 会发现一个文件后缀为:.incomplete,这是因为之前没有下完整所以显示临时文件后缀,复制这个文件夹的名称,然后选择刚粘贴过来的文件,重命名并粘贴,同时去掉后缀.incomplete。
  • 当你找不到.incomplete文件时,是因brew还没开始生成下载的临时文件,那你就再次运行一下就可以了。

(3)终端输入brew install rabbitmq即可

3.3 RabbitMQ的配置远程访问(mac电脑下)

进入/usr/local/etc/rabbitmq

找到文件rabbitmq-env.conf,并打开进行如下图修改,将原有的127.0.0.1删除:

3.4 brew管理RabbitMQ(mac系统下)

笔者使用brew进行管理,所以需要您先对homebrew进行安装,brew管理具体如下:

# 启动
$ brew services start rabbitmq # 重启
$ brew services restart rabbitmq # 停止
$ brew services stop rabbitmq

RabbitMQ|异步的更多相关文章

  1. 消息中间件系列五:RabbitMQ的使用场景(异步处理、应用解耦)

    一.异步处理 场景: 用户注册,写入数据库成功以后,发送邮件和短信. 准备工作: 1)安装RabbitMQ,参考前面的文章 2)新建一个名为RabbitMQAsyncProc的maven web工程, ...

  2. 抽一根烟的时间学会.NET Core 操作RabbitMQ

    什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...

  3. 基于消息队列(RabbitMQ)实现延迟任务

    一.序言 延迟任务应用广泛,延迟任务典型应用场景有订单超时自动取消:支付回调重试.其中订单超时取消具有幂等性属性,无需考虑重复消费问题:支付回调重试需要考虑重复消费问题. 延迟任务具有如下特点:在未来 ...

  4. Java秒杀系统实战系列~商品秒杀代码实战

    摘要: 本篇博文是“Java秒杀系统实战系列文章”的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码实战. 内容: “商品秒杀”功能模块是建立在“商品详情”功 ...

  5. 新版本SpringCloud sleuth整合zipkin

    SpringCloud Sleuth 简介 Spring Cloud Sleuth为Spring Cloud实现了分布式跟踪解决方案. Spring Cloud Sleuth借鉴了Dapper的术语. ...

  6. SpringCloud之Turbine

    [前面的话]书接上文,本文的某些知识依赖我的上一篇SpringCLoud的文章:SpringCloud之Feign,如果没有看过可以先移步去看一下.前文提到了hystrix的应用,以及hystrix的 ...

  7. 一个轻量级的.Net Core微服务快速开发的轮子

    前言     Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...

  8. software engineer's resume(帮助你写程序员简历)

    关键词 参考 简历模板 参考 下面开始是正文(关键词原文) 介绍 本项目由海外兔 (https://osjobs.net) 维护,海外兔团队由一线互联网面试官组成,提供海内外公司一对一入职套餐以及算法 ...

  9. 《基于.NET Core构建微服务》系列文章(更新至第6篇,最新第7篇,已发布主页候选区)

    原文:Building Microservices On .NET Core – Part 1 The Plan 时间:2019年1月14日 作者:Wojciech Suwała, Head Arch ...

  10. 「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建

    前言 微服务治理方案中,链路追踪是必修课,SpringCloud的组件其实使用很简单,生产环境中真正令人头疼的往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长,这都是项目上 ...

随机推荐

  1. Linux环境下django初入

    python -m pip install --upgrade pip 终端中 一. 创建项目: 1.django-admin startproject mysite(第一种比较好) 2.django ...

  2. DES原理及代码实现

    一.DES基础知识DES技术特点 DES是一种用56位密钥来加密64位数据的方法    DES采取了分组加密算法:明文和密文为64位分组长度    DES采取了对称算法:加密和解密除密钥编排不同外,使 ...

  3. 用Python爬取大众点评数据,推荐火锅店里最受欢迎的食品

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:有趣的Python PS:如有需要Python学习资料的小伙伴可以加点 ...

  4. Treasure Island DFS +存图

    All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure I ...

  5. mysql数据库深入学习

    mysql 数据库 一.数据库介绍 1.关系型数据库的特点 ​ 二维表 典型产品Oracle传统企业,MySQL是互联网企业 数据存取是通过SQL 最大特点,数据安全性方面强(ACID) 2.NoSQ ...

  6. sftp的用法

    linux sftp远程连接命令 sftp -oPort=60001 root@192.168.0.254 使用-o选项来指定端口号. -oPort=远程端口号 sftp> get /var/w ...

  7. Joomla 3.4.6 Remote Code Execution漏洞复现

    0x00:简介 Joomla是一套全球有名的CMS系统. Joomla基于PHP语言加上MySQL数据库所开发出来的WEB软件系统,目前最新版本是3.9.12. Joomla可以在多种不同的平台上部署 ...

  8. python调用word2vec工具包安装和使用指南

    python调用word2vec工具包安装和使用指南 word2vec python-toolkit installation and use tutorial 本文选译自英文版,代码注释均摘自本文, ...

  9. 树莓派4b 上手三板斧

    树莓派4b 上手三板斧 1.无屏幕和网线连接准备 windows / mac 电脑下载安装Notepad++ 新建文件并保存为ssh(该文件为空文件) 新建文件wpa_supplicant.conf ...

  10. git工具上传项目到码云

    首先,你需要在本地安装git客户端,此处简单易懂,略过然后,在本地建好文件夹,以本人为例,我的路径为 E:\git_project,此时需要通过鼠标右键选择:git bush here 如图所示然后会 ...