RabbitMq

RabbitMq,第1张

RabbitMq

Rabbitmq

中间件

什么是中间件为什么需要使用消息中间件中间件的特点消息中间件的本质及设计 RabbitMQ使用场景

解耦、削峰、异步高内聚,低耦合 rabbitmq的几种工作模式

中间件 什么是中间件

中间件(Middleware)是处于 *** 作系统和应用程序之间的软件,也有人认为它应该属于 *** 作系统中的一部分。人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件+平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软件和使用软件区分开来。

为什么需要使用消息中间件

具体地说,中间件屏蔽了底层 *** 作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担,中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

中间件的特点

为解决分布异构问题,人们提出了中间件(middleware)的概念。中间件位于平台(硬件和 *** 作系统)和应用之间的通用服务,如下图所示,这些服务具有标准的程序接口和协议。针对不同的 *** 作系统和硬件平台,它们可以有符合接口的协议规范的多种实现。

也很难给中间件一个严格的定义,但中间件应具有如下的一些特点:

(1)满足大量应用的需要(2)运行于多种硬件和 OS平台(3)支持分布计算,提供跨网络、硬件和 OS平台的透明性的应用或服务的交互(4)支持标准的协议(5)支持标准的接口 消息中间件的本质及设计

它是一种接受数据、接受请求、存储数据、发送数据等功能的技术服务
MQ消息队列:负责数据的传接受,存储和传递,所以性能要高于普通服务和技术
消息中间件的核心组成部分

消息的协议消息的持久化机制消息的分发策略消息的高可用,高可靠消息的容错机制 RabbitMQ使用场景 解耦、削峰、异步

同步异步的问题(串行)

串行方式:将订单信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端

public void makeOrder(){
    //1.发送订单
    //2.发送短信服务
    //3.发送email服务
    //4.发送app服务
}

并行方式 异步线程池

并行方式:将订单信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间

public void test(){
    //异步
    theadpool.submit(new Callable{
        //1.发送短信服务
    })
    //异步
    theadpool.submit(new Callable{
        //2.
    })
    //异步
    theadpool.submit(new Callable{
        //3.
    })
    //异步
    theadpool.submit(new Callable{
        //4.
    })
}

 

存在问题

耦合度高
需要自己写线程池自己维护成本太高
出现了消息可能会丢失,需要你自己做消息补偿
如何保证消息的可靠性你自己写
如果服务器承载不了,你需要自己去写高可用

异步消息队列的方式

好处:

    完全解耦,用 MQ建立桥接有独立的线程池和运行模型出现了消息可能会丢失,MQ有持久化功能如何保证消息的可靠性,死信队列和消息转移等如果服务器承载不了,你需要自己去写高可用,HA镜像模型高可用
高内聚,低耦合

好处:

完全解耦,用 MQ建立桥接有独立的线程池和运行模型出现了消息可能会丢失,MQ有持久化功能如何保证消息的可靠性,死信队列和消息转移等如果服务器承载不了,你需要自己去写高可用,HA镜像模型高可用 rabbitmq的几种工作模式

简单模式

Work queues 工作队列模式

特点:一个生产者,多个消费者,每个消费者获取到的消息唯一。

发布与订阅模式

一个生产者发送的消息会被多个消费者获取。
生产者:可以将消息发送到队列或者是交换机。
消费者:只能从队列中获取消息。
如果消息发送到没有队列绑定的交换机上,那么消息将丢失。

路由模式(绑定交换机)

1、 发送消息到交换机并且要指定路由key
2、 消费者将队列绑定到交换机时需要指定路由key

主体模式 topic(支持*#)

将路由键和某模式进行匹配,此时队列需要绑定在一个模式上,“#”匹配一个词或多个词,“*”只匹配一个词。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717503.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)