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. 2019-07-25【机器学习】无监督学习之聚类 K-Means算法实例 (1999年中国居民消费城市分类)

    样本 北京,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64天津,2459.77,495.47,697.33,302.87,284.1 ...

  2. Volatile的应用DCL单例模式(四)

    Volatile的应用 单例模式DCL代码 首先回顾一下,单线程下的单例模式代码 /** * 单例模式 * * @author xiaocheng * @date 2020/4/22 9:19 */ ...

  3. [Java网络安全系列面试题] GET 和 POST 的区别在哪里?

    一. 概述 本文的内容源自其他博客的总结,属于笔者的读书笔记,结构如下: HTTP 的请求报文 GET 方法的特点 POST 方法的特点 GET 和 POST 的区别 二. HTTP 的请求报文 首先 ...

  4. 使用dynamic 和MEF实现轻量级的 AOP 组件 (1)

    转载https://www.cnblogs.com/niceWk/archive/2010/07/19/1780843.html AOP魔法 今天你AOP了吗?谈到AOP,总有一种神秘的感觉,人类对于 ...

  5. Python数据预处理:使用Dask和Numba并行化加速

    如果你善于使用Pandas变换数据.创建特征以及清洗数据等,那么你就能够轻松地使用Dask和Numba并行加速你的工作.单纯从速度上比较,Dask完胜Python,而Numba打败Dask,那么Num ...

  6. pytorch 中HWC转CHW

    import torch import numpy as np from torchvision.transforms import ToTensor t = torch.tensor(np.aran ...

  7. ubuntu安装Python3并与Python2自由切换

    一.配置ssh链接安装openssh-server sudo apt-get install openssh-server 二.安装Python3及pip sudo apt-get install p ...

  8. 【编程之美】超时重传,滑动窗口,可靠性传输原理C语言实现

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/128003 ...

  9. python学习笔记(三)---字典

    字典 在Python中,字典 字典 是一系列键 键-值对 值对 .每个键 键 都与一个值相关联,你可以使用键来访问与之相关联的值.与键相关联的值可以是数字.字符串.列表乃至字典.事实上,可将 任何Py ...

  10. 微信jssdk遇到的一些问题汇总

    1.用户手动去触发的接口可以直接调用比如wx.startRecord(); 但是写在页面加载完成里就无效,需要写在 wx.ready(function(){ wx.startRecord(); }); ...