02.RabbitMQ简介

在介绍RabbitMQ之前,我们先了解一下消息队列的简史

RabbitMQ简史

1983年孟买26岁的工程师Vivek Ranadive设想一种软件总线,同年Teknekron诞生了。

1985年用于高盛,用于解决金融交易。于是发布订阅模式(PubSub)诞生了,同时还诞生了世界上第一个现代消息队列软件:Teknekron的The Information Bus(TIB)。

由于在那个时期金融交易行业门庭若市,因此TIB迅速传播开来。它引起了电信特别是新闻机构的注意。这些行业也特别需要将信息及时发布给千变万化的客户。这也解释了为什么在1994年大型新闻机构路透社收购了Teknekron。

与此同时,这个迅猛发展的企业软件也引起了蓝色巨人的注意。毕竟IBM最大的几位客户都来自于金融服务行业。因此,在20世纪80年代后期,IBM开始研究开发自己的消息队列软件,实际开发工作始于1990年,三年后,消息队列服务器软件IBM MQ产品系列面世。17年后,MQ系列进化成了WebSphere MQ并统治着商业消息队列平台市场。

在那段时间,TIB并没有消失在路透社腹中。相反,它仍然是企业通信市场的主要参与者。并且在1997年Teknekron以TIBCO的形式作为一家独立公司再度出现。同年,微软也在消息通信市场崭露头角:微软消息队列MSMQ诞生。

通过这一系列的革新,消息队列(MQ)软件主要留住了大型组织机构,它们需要可靠性、解耦以及实时消息通信。为什么MQ不去寻找更大的市场呢?

因为:供应商壁垒。因为,商业MQ供应商想要解决应用互通的问题,而不是去创建标准接口来允许不同的MQ产品互通。供应商壁垒维持着足够高的价格和利润率,并使得这些商业MQ软件对那些当今繁荣昌盛的初创公司和Web2.0公司来说遥不可及。

结果,中小技术公司并不是唯一一个对高价格MQ供应商感到不满的。那些造就MQ产业的金融服务公司对此也激动不起来。越是大型的金融公司越不可避免地使用来自众多供应商的MQ产品,来服务企业内部的不同应用。如果应用已经订阅了TIBCO MQ消息,若突然需要消费来自IBM MQ的消息,则实现起来会非常困难。这些产品使用不同的API、不同的协议,因而毫无疑问无法联合起来组成单一的总线。为了解决这个问题,Java Message Service(JMS)在2001年诞生了。

JMS试图通过提供公共Java API的方式,隐藏单独MQ产品供应商提供的实际接口,从而跨越了壁垒和解决了互通问题。从技术上讲,Java应用程序只需针对JMS API编程,选择合适的MQ驱动即可。JMS会打理好其他部分。

问题是你在尝试使用单独标准化接口来胶合众多不同的接口。这就像是把不同类型的衣服黏在一起:缝合处终究会裂开,真想会暴露出来。使用JMS的应用程序会变得更加脆弱。我们需要新的消息通信标准化方案。

2004年,救世主AMQP诞生了。AMQP从一开始就设计为开放标准,以解决众多的消息队列需求和拓扑结构问题。凭借开发,任何人都可以执行这一标准,针对标准编码的任何人都可以和任意AMQP供应商提供的MQ服务器进行交互。

在2006年,Rabbit Technologies诞生了:其拥有着RabbitMQ的知识产权。之所以叫Rabbit这个名字,是因为他们觉得,兔子是行动非常迅速的动物,而且繁殖起来也非常疯狂,把它用于分布式软件的命名再合适不过了。

时机总是如此的恰到好处,就在此时,AMQP规范的第一份公开草案也公之于世了。作为一份新的规范,AMQP正快速修订。这正是Erlang可以施展拳脚的地方。通过Erlang,RabbitMQ可以快速开发并跟上AMQP标准前进的节奏。核心开发人员Tony Garnock-Jones仅仅用了两个半月就将RabbitMQ 1.0版本开发完成了。2007年RabbitMQ 1.0版本正式面世。

此处简短介绍下ErLang,Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,因此非常适合于构建分布式,实时软并行计算系统。使用Erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。进程间上下文切换对于Erlang来说仅仅 只是一两个环节,比起C程序的线程切换要高效得多得多了。

Erlang并非一门新语言,它出现于1987年,只是当时对并发、分布式需求还没有今天这么普遍,当时可谓英雄无用武之地。Erlang语言创始人Joe Armstrong当年在爱立信做电话网络方面的开发,他使用Smalltalk,可惜那个时候Smalltalk太慢,不能满足电话网络的高性能要求。但Joe实在喜欢Smalltalk,于是定购了一台Tektronix Smalltalk机器。但机器要两个月时间才到,Joe在等待中百无聊赖,就开始使用Prolog,结果等Tektronix到来的时候,他已经对Prolog更感兴趣,Joe当然不满足于精通Prolog,经过一段时间的试验,Joe给Prolog加上了并发处理和错误恢复,于是Erlang就诞生了。这也是为什么Erlang的语法和Prolog有不少相似之处。

我们再回头来看RabbitMQ。就这样一直到今天,RabbitMQ广泛使用在小到初创公司,大到互联网巨头。其中,令创始人感到惊讶的是:Rabbit的客户主要是技术公司而并非金融公司。同时,RabbitMQ也吸引着那些只有少量预算同时也要解决消息通信的个人或团队。

我们在了解了简史之后,接下来我们再来看下,如何搭建RabbitMQ环境

搭建RabbitMQ环境

下载地址:https://www.rabbitmq.com/download.html

Windows下安装

1.安装Erlang:
下载地址:https://www.erlang.org/downloads

安装:

安装完成。

2.安装RabbitMQ:

安装完成。

3.启动管理工具

  • 打开RabbitMQ Server的安装目录下的 rabbitmq_server-3.7.16\sbin

  • 在此目录下,打开cmd,并输入命令,启用Web管理界面
rabbitmq-plugins enable rabbitmq_management 

  此处提示Erlang没有添加环境变量,添加Erlang环境变量后重试。

  • 启动RabbitMQ Server

  • 访问 http://127.0.0.1:15672

Linux(Ubuntu)下安装

1.安装Erlang

sudo apt-get install erlang

2.安装RabbitMQ

sudo apt install rabbitmq-server

3.启动、停止

sudo service rabbitmq-server start
sudo service rabbitmq-server stop
sudo service rabbitmq-server restart

4.开启Web界面管理工具

rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart

5.解决guest用户不允许访问

cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/ebin
sudo vim rabbit.app

# 将 {loopback_users, [<<”guest”>>]}
# 修改为 {loopback_users, []}
# 原因:rabbitmq从3.3.0开始,使用guest/guest权限只能通过localhost访问

6.重启服务,就可以访问Web界面啦

sudo systemctl restart rabbitmq-server.service

Web管理界面咱们会在理解了RabbitMQ消息通信中的基本概念后,再详细介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: spring.rabbitmq.virtual-host是Spring Boot中RabbitMQ的虚拟主机配置属性。虚拟主机是RabbitMQ中的一个逻辑概念,它允许在一个物理主机上创建多个逻辑消息代理。每个虚拟主机都有自己的队列、交换机和绑定,它们之间是相互隔离的。在Spring Boot中,我们可以使用spring.rabbitmq.virtual-host属性来指定要使用的虚拟主机的名称。默认情况下,它的值为“/”,表示使用默认虚拟主机。如果我们需要使用其他虚拟主机,可以将其设置为相应的名称。 ### 回答2: 在RabbitMQ中,virtual-host(虚拟主机)是一种逻辑部分,可用于将不同的用户和应用程序分离。Spring AMQP提供了一个配置属性`spring.rabbitmq.virtual-host`来设置RabbitMQ虚拟主机。 首先,我们需要了解什么是虚拟主机。在RabbitMQ中,虚拟主机是一个RabbitMQ服务器中的逻辑部分,它类似于操作系统中的进程的概念,可以将不同的用户和应用程序分离,让它们彼此独立地运行。每个虚拟主机都具有自己的队列、交换机、绑定和权限控制机制,它们可以互不影响地存在于同一台物理机器上。通过使用虚拟主机,可以有效地隔离不同的应用程序,从而保证各应用程序之间的通信安全和可靠性。 在Spring AMQP中,我们可以通过设置`spring.rabbitmq.virtual-host`属性来配置RabbitMQ的虚拟主机。该属性默认值为`/`,表示使用默认的虚拟主机,也可以设置为其他虚拟主机名称。例如,我们可以使用以下配置来设置虚拟主机名称为`myVhost`: ``` spring.rabbitmq.virtual-host=myVhost ``` 配置好虚拟主机之后,我们可以使用`ConnectionFactory`来创建连接。`ConnectionFactory`类提供了一个`setVirtualHost()`方法,用于设置虚拟主机名称。例如: ```java @Configuration public class RabbitMQConfig { @Value("${spring.rabbitmq.host}") private String rabbitMQHost; @Value("${spring.rabbitmq.port}") private int rabbitMQPort; @Value("${spring.rabbitmq.username}") private String rabbitMQUsername; @Value("${spring.rabbitmq.password}") private String rabbitMQPassword; @Value("${spring.rabbitmq.virtual-host}") private String rabbitMQVirtualHost; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(rabbitMQHost, rabbitMQPort); connectionFactory.setUsername(rabbitMQUsername); connectionFactory.setPassword(rabbitMQPassword); connectionFactory.setVirtualHost(rabbitMQVirtualHost); return connectionFactory; } } ``` 在上面的示例中,我们创建了一个`ConnectionFactory` bean,并配置了连接RabbitMQ所需的所有属性,包括虚拟主机名称。然后,我们可以将这个bean注入到我们的其他组件中,如`RabbitTemplate`或`SimpleMessageListenerContainer`。 总的来说,`spring.rabbitmq.virtual-host`是一个非常重要的配置属性,它可以帮助我们有效地隔离不同的应用程序,从而提高整个系统的可靠性和安全性。在Spring AMQP中,通过配置该属性,我们可以轻松建立多个虚拟主机以满足不同的业务需求。 ### 回答3: 在RabbitMQ中,Virtual Host是一种逻辑概念,它允许多个独立的消息队列在同一个物理RabbitMQ服务器上运行,而不会互相影响。Virtual Host可以被看作是一个独立的RabbitMQ服务器,它有自己的用户、权限、交换机、队列和绑定,并且不同的Virtual Host之间是相互隔离的。 Spring AMQP框架提供了对RabbitMQ的完整整合,其中spring.rabbitmq.virtual-host属性是用来设置Virtual Host的。如果没有指定该属性,则默认为“/”,表示使用默认Virtual Host。可以根据实际需求设置不同的Virtual Host,以实现不同的业务应用之间的隔离与管理。 在Spring AMQP框架中,可以通过使用@RabbitListener和@RabbitHandler注解来监听指定Virtual Host下的队列,以便处理消息。同时,也可以使用RabbitTemplate来发送消息到指定的Virtual Host下的交换机和队列中。 总之,Virtual Host是RabbitMQ中实现隔离和管理的重要手段,而在Spring AMQP框架中,通过设置spring.rabbitmq.virtual-host属性可以轻松配置和管理Virtual Host。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值