win7系统安装消息队列的方法(图文)
在使用很多国外软件时如WinCC、数据库等会要求安装“消息队列”,“消息队列”是在消息的传输过程中保存消息的容器。可是Win7纯净版系统中如何安装消息列队呢?其实安装方法很简单,接下来和大家一起图文分享win7系统安装消息队列的方法。
具体方法如下:
1、首先打开开始菜单—控制面板;
2、点击程序;
3、点击程序和功能;
4、点击打开或关闭windows功能;
5、将其中的MicrosoftMessageQueue(MSMQ)打上勾确定即可,便执行安装消息队列。
本教程和大家详细介绍win7系统安装消息队列的方法,是不是很简单呢?直接点击勾选MicrosoftMessageQueue(MSMQ)服务器即可,希望可以帮助到大家!
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用。
1、相关概念说明
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
2、使用流程
即 Client - AMQP server - Client左边的Client向右边的Client发送消息,流程:1, 获取Conection2, 获取Channel3, 定义Exchange,Queue4, 使用一个RoutingKey将Queue Binding到一个Exchange上5, 通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,6, 接收方在接收时也是获取connection,接着获取channel,然后指定一个Queue直接到它关心的Queue上取消息,它对Exchange,RoutingKey及如何binding都不关心,到对应的Queue上去取消息就OK了 。
分布式消息 MQ 的两种订阅方式如下:
一、点对点模式:
1、场景:
客户端A和客户端B使用同一队列,进行消息通讯,客户端 A 发布消息,客户端 B 接收消息。
2、点对点模式包含三个角色——消息队列,发送者,接收者:
发送者发送消息到消息队列中,接收者从消息队列中取出消息进行接收,消息接收后,消息队列中将不再存储该消息,其他接收者不可能再接收到这条消息。
3、特点:
(1)每个消息只有一个接收者。
(2)发送者和接收者之间没有依赖性,发送者发送消息后,消息直接存储在消息队列中,接收者是否在线并不影响发送。
(3)接收者成功接收消息之后,需要向消息队列应答成功,以便消息队列删除该条消息。
二、发布订阅模式:
1、场景:
客户端 A,客户端 B,客户端 N 等订阅同一主题,进行消息发布和接收。
2、点对点模式包含三个角色——角色主题(topic),发布者(publisher),订阅者(subscriber):
发送者将消息发送到topic,系统将这些消息传递给多个订阅者。
3、特点:
(1)每个消息可以有多个订阅者。
(2)发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才可以接收发布者发布的消息。
(3)为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行。
分布式消息(服务)介绍:
分布式消息服务是一个用来处理分布式系统中的消息,分布式应用程序通过网络访问位于不同服务器上的消息队列,就像访问本地系统一样。
分布式消息服务是一个专为企业级应用开发的软件服务,具有高可用,高扩展,高性能,可根据需要灵活部署和伸缩的特点。分布式消息服务是一个托管的高性能消息队列服务,拥有高吞吐,高可用,高可靠,可根据需要灵活配置的队列服务,满足不同应用场景的需要。
分布式消息服务是一个高吞吐、高可用的消息中间件服务,使用消息队列通信,具有大规模、高可靠、高并发访问、可扩展、高安全、可弹性伸缩、便捷管理的特点。
-分布式
-分布式信息系统
RabbitMQ是2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,简称MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法,由Erlang(专门针对于大数据高并发的语言)语言开发,可复用的企业消息系统,是当前最主流的消息中间件之一,具有可靠性、灵活的路由、消息集群简单、队列高可用、多种协议的支持、管理界面、跟踪机制以及插件机制。
1消息 就是数据,增删改查的数据。例如在员工管理系统中增删改查的数据
2队列 指的是一端进数据一端出数据,例如C#中(Queue数据结构)
1消息队列指:一端进消息,一端出消息
2RabbitMQ就是实现了消息队列概念的一个组件,以面向对象的思想去理解,消息队列就是类,而RabbitMQ就是实例,当然不仅仅只有RabbitMQ,例如ActiveMQ,RocketMQ,Kafka,包括Redis也可以实现消息队列。
1在常见的单体架构中,主要流程是用户UI操作发起Http请求>服务器处理>然后由服务器直接和数据库交互,最后同步反馈用户结果
2在微服务架构中,UI与微服务通信,主要是通过Http或者gRPC同步通信
问题分析
在上述2种情况下,我们发现在UI请求时都是同步操作 ,第2种架构虽然将整体服务按业务拆分成不同的微服务并且对应各自的数据库,但是在用户与微服务通信时,存在的问题依然没有解决,例如数据库的承载能力只能处理10w个请求,如果遇到高并发情况下,UI发起50w请求,那数据库是远远承载不了的,从而导致如下问题。
1高并发请求导致系统性能下降响应慢,同时数据库承载风险加大
2扩展性不强UI操作的交互对业务的依赖较大,导致用户体验下降
3瞬时流量涌入巨大的话,服务器可能直接挂了
解决方案
RabbitMQ的优势
RabbitMQ的不足
1ConnectionFactory 为Connection的制造工厂。
2Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。
3Channel是我们与RabbitMQ打交道的最重要的一个接口,我们大部分的业务操作是在Channel这个接口中完成的,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。
4Exchange(交换机) 我们通常认为生产者将消息投递到Queue中,实际上实际的情况是,生产者将消息发送到Exchange,由Exchange将消息路由到一个或多个Queue中(或者丢弃),而在RabbitMQ中的Exchange一共有4种策略,分别为:fanout(扇形)、direct(直连)、topic(主题)、headers(头部)
1下载RabbitMQ
2运行环境erlang
3安装完成之后,加载RabbitMQ管理插件
4安装成功访问RabbitMQ管理后台http://localhost:15672
1分别创建考勤服务,请假服务,计算薪酬服务,邮件服务,短信服务消费者角色
2创建员工管理网站用于模拟前端调用,主要充当生产者角色
3在员工管理网站和每一个模拟微服务中通过nuget引入RabbitMQClient
4在员工管理网站中创建模拟添加考勤的控制器并加入生产者代码
5在考勤微服务中创建接口,并在接口中加入消费者代码
fanout类型的Exchange路由规则非常简单,工作方式类似于多播一对多,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。
业务实例
当我们有员工需要请假,在员工管理系统提交请假,但是由于公司规定普通员工请假,需要发送短信到他的主管领导,针对此业务场景我们需要调用请假服务的同时去发送短信,这时需要两个消费者(请假服务,短信服务)来消费同一条消息,其实本质就是往RabbitMQ写入一个能被多个消费者接收的消息,所以可以使用 扇形交换机,一个生产者,多个消费者
生产者模拟使用调用控制器来实现
消费者实现IHostedService 接口创建一个监听主机
直接交换器,工作方式类似于单播一对一,Exchange会将消息发送完全匹配ROUTING_KEY的Queue,缺陷是无法实现多生产者对一个消费者
当我们员工管理系统需要计算薪资并将结果以发送短信的方式告诉员工,这个时候我们就不太适合用“扇形交换机”了,因为换做是你,你也不想你的工资全公司都知道吧?这个时候就需要定制了一对一的场景了,那就在生产消息时使用直连交换机根据routingKey发送指定的消费者
生产者模拟使用调用控制器来实现
消费者实现IHostedService 接口创建一个监听主机
Exchange绑定队列需要制定Key; Key 可以有自己的规则;Key可以有占位符; 或者# , 匹配一个单词、#匹配多个单词,在Direct基础上加上模糊匹配;多生产者一个消费者,可以多对对,也可以多对1, 真实项目当中,使用主题交换机。可以满足所有场景
1生产者定义Exchange,然后不同的routingKey绑定
3消费者routingKey的模糊匹配,生产者发送消息时routingKey定义以sms开头, 号只能匹配的routingKey为一级,例如(smsA)或(smsB)的发送的消息,# 能够匹配的routingKey为一级及多级以上 ,例如 (smsA)或者(smsAQWEIOP)
在月底的时候我们需要把员工存在异常考勤信息,薪资结算信息,请假信息分别以邮件的形式发送给我们的员工查阅,我们知道这是一个典型的多个生产者,一个消费者场景,异常考勤信息,薪资结算信息,请假信息分别需要生产消息发送到RabbitMQ,然后供我们员工消费
分别模拟3个生产者:异常考勤信息,薪资结算信息,请假信息
headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。
在绑定Queue与Exchange时指定一组键值对以及x-match参数,x-match参数是字符串类型,可以设置为any或者all。如果设置为any,意思就是只要匹配到了headers表中的任何一对键值即可,all则代表需要全部匹配。
1不需要依赖Key
2更多的时候,像这种Key Value 的键值,可能会存储在数据库中,那么我们就可以定义一个动态规则来拼装这个Key value ,从而达到消息灵活转发到不同的队列中去
我们根据上面的业务和代码简单实现了由生产者到消费者的一个业务流程,我们可以总结出知道,整个消息的收发过程包含有三个角色,生产者(员工管理网站)、RabbitMQ(Broker)、消费者(微服务),在理想状态下,按照这样实现,整个流程以及系统的稳定性,可能不会发生太大的问题,但是真正在实际应用中我们要去思考可能存在的问题,主要从三个大的方面去分析,然后发散。
1生产端
2存储端
3消费端
我们在给RabbitMQ发送消息时,如何去保证消息一定到达呢,我们可以使用RabbitMQ提供了2种生产端的消息确认机制
我们生产端给RabbitMQ发送消息成功后,如果RabbitMQ宕机了,会导致RabbitMQ中消息丢失,如何解决消息丢失问题,针对RabbitMQ消息丢失,我们可以在生产者中使用
1持久化消息
2集群
当生产者写入消息到RabbitMQ后,消费服务接收消息期间,服务器宕机,导致消息丢失了,这个时候我们就应该使用RabbitMQ的消费端消息确认机制
1自动确认
2手动确认
消费者收到消息。消费者发送确认消息给rabbitmq期间。执行业务逻辑失败了,但是消息已经确认被消费了,我们应该在我们的消费者接收消息回调执行业务逻辑后面,执行使用手动确认消息机制,保证消息不被丢失
原文链接:https://wwwcnblogscom/yuxl01/p/15978229html
一、redis消息队列和kafka消息队列的比较
1、Redis作为消息队列
Redis的pub-sub模式非常像西式快餐一样,快产快消,全都是因为Redis是使用内存来做存取,所有你生产的消息立马会被消费者一次性全部处理掉,并且没有留下任何痕迹, 同时因为内存总是宝贵的,所以内存上会有限制,当生产者以及消费者上来的时候也会对redis的效率,还有Redis在处理发布和消费big size(10K+的文件)的数据的时候会表现出无法忍受的缓慢
如果有以下场景可以考虑使用Redis作为消息队列:
a、如果你的需求是快产快消的即时消费场景,并且生产的消息立即被消费者消费掉
b、如果速度是你十分看重的,比如慢了一秒好几千万这种
c、如果允许出现消息丢失的场景
d、如果你不需要系统保存你发送过的消息,做到来无影去无踪
e、需要处理的数据量并不是那么巨大
2、KafKa作为消息队列
KafKa的设计精妙,支持分布式,高可用的部署,并且对一个大的队列采用分成多个Partition(分区),来提高消息入队的吞吐量,分而治之的思想 并且消费的时候支持group的概念,能够支持多个客户端消费同个队列,并且一个group中可以增加consumer的数量来扩展消费的处理量
KafKa不熟生产者数量的影响,因为吞吐量足够支撑,即使在廉价的单机服务器上也可以有10万每秒的消息传输量,并且消费者是想什么时候消费都可以,消息它就在那里,十分灵活,不用担心来无影去无踪的恐慌能把消息持久化,并以一定的策略(例如一定时间内删除,或者到达多大容量的时候清空)
当有一下场景的时候你可以考虑使用KafKa作为消息队列:
a、如果你想要稳定的消息队列
b、如果你想要你发送过的消息可以保留一定的时间,并不是无迹可寻的时候
c、如果你无法忍受数据的丢失
d、如果速度不需要那么的快
e、如果需要处理数据量巨大的时候
0条评论