八 消息队列及Rabbitmq

(八)RabbitMQ消息队列-通过Topic主题模式分发消息 前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用。如果对direct模式下通过routingkey来匹配消息的模式已经有一定了解那fanout也很好理解。简单的可以理解成direct是通过routingkey精准匹配的,而topic是通过routingkey来模糊匹配。 在topic模式下支持两个特殊字符的匹配。 * (星号) 代表任意 一个单词 阅读详情

八 消息队列及Rabbitmq

消息队列基础

消息队列应用场景:解耦(耦合性高容错性低)、异步、削峰(秒杀项目将请求缓存起来)

消息队列选型:

在这里插入图片描述

消息队列缺点系统可用性降低(一旦MQ宕机);系统复杂性高(如下所示);一致性问题

如何保证高可用?(以Rabbitmq为例)
普通集群:
1.在多台机器上分别启动RabbitMQ实例。
2.多个实例之间可以相互通信。
3.创建的Queue只会放在一个RabbitMQ上,其他实例都同步元数据。
4.消费的时候,如果连接的没有Queue,那么当前实例会从queue所在实例拉取数据。
特点
1.没有真正做到高可用
2.有数据拉取的开销和单实例的瓶颈问题
在这里插入图片描述
镜像集群
RabbitMQ:使用镜像集群每一个节点都保留完整的数据既有实例数据还有元数据
1.在多台机器.上分别启动RabbitMQ实例。
2.多个实例之间可以相互通信。
3.每次生产者写消息到queue的时候,都会自动把消息同步到多个实例的queuue. 上。每个
RabbitMQ节点上都有Queue的消息数据和元数据。
4.某一个节点宕机,其他节点依然保存完整数据, .不影响客户端消费。

在这里插入图片描述

如何保证消息不丢失?
在这里插入图片描述

丢失原因发送至MQ过程中丢失;Mq接受到消息还没来得及持久化宕机;消费者获得消息还没处理宕机了

措施针对一MQ接收到后confirm确认,没收到重发。针对二MQ收到消息立即持久化再发确认。针对三:消费方消费完毕进行ACK确认后,mq再删除

如何保证消息不被重复消息?

重复消息是不可能避免的,产生原因网络不可达。

解决办法:
1.消息发送者发送消息时携带一个全局唯一的消息id
2.消费者获取消费后先根据id在redis/db中查询是否存在消费记录
3.如果没有消费过就正常消费,消费完毕后写入redis/db
4.如果消息消费过就直接舍弃

如何保证消费的顺序性?

网络原因导致顺序性
解决方法:生产者、MQ、消费者1比1比1,但有缺陷
缺点:效率低
最好解决办法:使用MQ集群
在这里插入图片描述

八 Rabbitmq实现

背景:在freemarker中,接口调用其实是同步的,耦合度也很大,如果前端有很多地方进行部署的话,那么后端需要修改代码。

在这里插入图片描述
工厂就是后端,他会生成html,虽然发送通知到mq,这就相当于发了一个消息到消息队列货。消费者也就是前端节点的应用监听到以后,是下载html到给子的服务节点中去了。

Rabbitmq:
在这里插入图片描述

●RabbitMQ: 消息队列服务中间件
●生产者produce: 创建消息,发送到mq
●消费者Consumer: 监听消息,处理业务通知
●Exchange: MQ的交换机,他会按照一定的规则来转发到某个队列,类似controller路由机制。比如/article/read
●Queue:队列,存储消息。相当于controller。 被消费者监听,一旦有消息,会被消费者接收到。
●Channel: 生产者和消费者与MQ建立的通道,相当于httpSession会话, 建立请求就会有channel。可
以理解为一个桥梁作用,消息经过桥梁到达mq的queue。

.NET CORE消息队列RabbitMQ RabbitMQ是一个开源的消息代理和队列服务器,用于在分布式系统中传递消息。它支持多种消息协议,提供可靠的消息传递、灵活的路由、集群和高可用性功能。 阅读详情

相关推荐

springcloud学习笔记(八):通过spring-cloud-stream实现消息队列rabbitmq的消息生产和消费

本文主要介绍如何在springcloud中通过spring-cloud-stream实现消息队列rabbitmq的消息生产和消费。本例使用的springcloud版本为:2021.0.3,springboot版本为:2.6.8。本例通过创建一个生产者项目provide-stream-8011和两个消费者项目consumer-stream-8012、consumer-stream-8013来进行演示。...

sg_knight的专栏 1905

消息队列 RabbitMQ[八] SpringBoot Consumer 限流机制

RabbitMQ的实际应用场景中,有一个很重要的特性——流量销峰, 那这是什么意思呢?🤔 比如在一个整点秒杀活动中,在某一时刻可能会产生大量的请求到服务器,这时服务器可能会因为到来的大量请求而崩溃,流量销峰就是将这些请求都放到rabbitmq中,然后服务器一次取承受范围之内个请求,这就会大大减少服务器的压力。 但是我们在之前的练习中可以看到,每次消费者只要一运行就会取出所有消息,那怎么取出定量的消息呢?🤔 rabbitmq提供了限流机制来控制每次消费者取多少消息 一、前期准备 先在topic_qu

qq_43623492的博客 1687

【面试经验】大疆笔试-计算机视觉算法B卷

3、a=np.random.randn(3,3) b=np.random.randn(3,1) ,那么c=a*b的维度应该是:*是元素乘法或者torch.mul,@才是矩阵乘法或者torch.matmul,不会触发广播机制;8、将分辨率降低一半时,精标定内参(fx、fy、cx、cy、k1、k2、k3)焦距、光心、畸变系数将分别变成(fx、fy、cx/2、cy/2、k1、k2、k3),只能搜到光心变成一半,畸变系数不变。12、KLT算法在频闪光源、重复纹理、高速机动、环境照度低的情况下效果显著下降。

litterfinger的博客 1448

八、SpringCloud-RabbitMQ + Spring AMQP 消息队列

Broker 是一个像数据总线一样的东西,所有的服务要接收数据和发送数据都发到这个总线上,这个总线就像协议一样,让服务间的通讯变得标准和可控。在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。

Three-Sides 1488

电机控制实战:SVPWM五段式与七段式算法在STM32上的实现对比

本文深入对比了SVPWM五段式与七段式算法在STM32上的实现效果,详细分析了两种算法在占空比控制、开关损耗和波形质量等方面的差异。通过实测数据,为工程师提供了针对不同应用场景的选型建议,包括电池供电设备和高精度伺服控制系统的优化方案。

h6i7j8的博客 584

软件测试工程师笔试题

这里写目录标题全套软件测试面试笔试题(附答案)二、选折三、添空四、简答(资料是搜集整理的,感谢前辈的解题)无1.区别阶段评审的与同行评审2.什么是软件测试3. 简述集成测试的过程4 怎么做好文档测试5 白盒测试有几种方法6 系统测试计划是否需要同行审批,为什么7Alpha 测试与 beta 的区别8 比较负载测试,容量测试和强度测试的区别。性能测试从使用方便的角度来说,9 测试结束的标准是什么?10 描述软件测试活动的生命周期?11 软件的缺陷等级应如何划分? 软件测试工程师笔试题(附答案) 全套软件测试面

m0_46446002的博客 2549

Spring Cloud学习(八)【RabbitMQ消息队列 服务异步通讯】

MQ (MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是事件驱动架构中的 Broker。Spring AMQP 项目将Spring的核心概念应用于基于AMQP的消息传递解决方案的开发。它提供了一个“模板”,作为发送和接收消息的高级抽象。它还通过“侦听器容器”为消息驱动的POJO提供支持。这些库促进了AMQP资源的管理,同时促进了依赖注入和声明性配置的使用。在所有这些情况下,您将看到与Spring框架中JMS支持的相似之处。 该项目由两部分组成;spring-amqp 是基础抽象

多思考🤔~ 357

银河麒麟系统V10 sp1,安装wine 9.0

银河麒麟系统V10 sp1 x86_64,安装wine 9.0

daqinzl的专栏 1万+

(八)消息队列——RabbitMQ的惰性队列

消息队列——惰性队列一、消息堆积问题:二、惰性队列:1、背景:2、惰性队列:3、设置惰性队列:三、总结: 消息队列——惰性队列 一、消息堆积问题: 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 解决消息堆积有三种种思路: 增加更多消费者,提高消费速度 在消费者内开启线程池加快消息处理速度 扩大队列容积,提高堆积上限 二、惰性队列: 1、背景: RabbitMQ的队列是内存存储的,.

方方土的博客 1800

免费替代Cursor!TRAE中文版这些隐藏功能90%的人不知道

本文深度评测了免费AI编程工具TRAE中文版,揭示其超越代码补全的隐藏功能。重点介绍了其SOLO模式如何重塑从需求到部署的全流程开发,以及对微信小程序、Taro、Ant Design Pro等国产技术栈的深度适配能力,为中文开发者提供了高度本地化的高效解决方案。

gray5的博客 840

什么是 SAP ABAP Secure Storage

此过程将单独的密钥存储在密钥路径中的密钥文件中,并自动使用新加密密钥加密安全存储中的所有数据记录。需要注意的是,不要在没有命令行工具的情况下操作密钥文件,例如,不要用不同的版本替换密钥文件,否则,安全存储中的数据记录可能变得不可读。当需要访问这些数据时,系统会对其进行解密。文件系统中的安全存储(Secure Storage in the File System)也是 SAP NetWeaver Application Server for ABAP 的一部分,主要用于安全存储连接相关的数据,如密码等。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 439

【SpringCloud-微服务系列(八)RabbitMQ消息队列详解】

一对一一对多前两种都只有一个队列,多个消费者共享一个队列中的消息发布/订阅模式由交换机绑定多个队列,每个消费者消费自己的队列中的消息路由模式在发布订阅模式的基础上,加入路由键,消息通过键路由到不同的队列主题模式在路由模式基础上,键中加入通配符RPC模式。......

清风ikl的博客 1237

Unity-Mirror网络框架-从入门到精通之Mirror简介

在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计。它使得开发者能够轻松实现网络连接、数据同步和游戏状态管理。本文将深入介绍Mirror的基本概念、如何与其他网络框架进行比较,以及如何从零开始创建一个使用Mirror的简单网络项目。Mirror是一个功能强大的Lite网络框架,旨在替代Unity的UNet网络解决方案。它提供了高效的多玩家架构、简单易用的API,以及良好的社区支持。

TxNet 3093

SpringBoot(八) Spring和消息队列RabbitMQ

概述 1.大多数应用中,可以通过消息服务中间件来提升系统异步能力和拓展解耦能力。 2.消息服务中的两个重要概念:消息代理(Message broker)和目的地(destination) 当消息发送者发送消息后,将由消息代理接管,消息代理保证消息传递到指定目的地。 3.消息队列主要有两种形式的目的地: 队列:点对点方式通信(point-to-point) 主题:发布/订阅消息...

weixin_30776545的博客 192

15 RK3568 RTL8111 PCIE

我这边扩了三个网卡。pcie3.0拆分了1+1lane。需要注意自己的reset引脚修改为自身rtl引脚即可。1、调试pcie 扩展网卡 RTL8111。

qq_39451352的博客 180

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

消息队列---RabbitMQ的学习(八)

 只想赚钱的呆头鹅 Success自述概述单独发布批量发布异步发布Ending 自述    该篇文章属于额外篇,主要描述RabbitMQ提供的消息确认 概述 单独发布 批量发布 异步发布 Ending

qq_42618394的博客 2587

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring Boot3.0(八):集成消息队列 RabbitMQ

RabbitMQ

qq_2118119173的博客 615

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java面试通关指南(八):消息队列风暴:Kafka、RocketMQ、RabbitMQ三强争霸

本文深入解析三大主流消息队列(Kafka、RocketMQ、RabbitMQ)的核心特性和应用场景。消息队列主要提供系统解耦、异步处理、流量削峰和消息广播四大核心价值,技术选型需综合考量吞吐量、延迟、可靠性等维度。Kafka凭借顺序写磁盘、零拷贝等技术实现百万级TPS,适合大数据场景;RocketMQ强事务支持适用于金融交易;RabbitMQ则以其丰富功能和易用性见长。

weixin_38717458的博客 1151

RabbitMQ消息队列(八):消息堆积、消息丢失、 有序消费消息、重复消费

当消息生产的速度长时间,远远大于消费的速度时。就会造成消息堆积。消息堆积的影响可能导致新消息无法进入队列可能导致旧消息无法丢失消息等待消费的时间过长,超出了业务容忍范围。产生堆积的情况生产者突然大量发布消息消费者消费失败消费者出现性能瓶颈。消费者挂掉解决办法排查消费者的消费性能瓶颈增加消费者的多线程处理部署增加多个消费者。...

fatestranger的博客 2543

spring Cloud微服务架构实战项目系列之redis缓存用户注册微服务开发以及rabbitmq消息队列短信微服务开发(八)

文章目录序言1为什么要去使用rabbitmq2消息队列的应用场景3 redis缓存应用场景4 redis和rabbitmq安装5用户注册功能redis以及rabbitmq的结合使用5.1效果演示5.2功能分析5.2用户注册5.3功能测试5.4核心业务逻辑代码6个人说明 序言             我太难了,官方我想说我一直在坚持输出价值...

HP-MN 694

消息队列—RabbitMQ(万字详解)

在基于微服务开发的电商项目中,商品的查询和商品的修改是通过两个服务实现的,如果修改了商品的价格,如何保证商品查询服务查询出来的商品价格同步更新呢?同步调用➢ A服务调用B服务,需要等待B服务执行完毕的返回值,A服务才可以继续往下执行。和RPC(Dubbo)实现同步调用。异步调用➢ A服务调用B服务,而无需等待B服务的执行结果,也就是说在B服务执行的同时A服务可以继续往下执行。➢ 通过:消息队列实现异步调用。 MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通

How many ten years in the life time? 6343

消息队列:RabbitMQ

总结了消息中间件的特性、应用以及相关问题。详细介绍了如何使用RabbitMQ解决分布式相关问题。

TheAnnoyingDog的博客 4900

消息队列之 RabbitMQ

本文为转载文章: 原文地址:https://www.jianshu.com/p/79ca08116d57/ 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了。 市面上的消息队列产品有很多,比如老牌的 ActiveMQ、RabbitMQ ,目前我看最火的 Kafka ,还有 ZeroMQ ,去年底...

方志朋的专栏 1万+

消息队列RabbitMQ

消息队列是一种在分布式系统中常用的通信机制,简称为MQ,它允许不同的应用程序或服务之间通过发送和接收消息来进行异步通信。对于小型企业而言,出于成本考虑,我们通常只会搭建一套MQ集群,公司内的多个不同项目同时使用。由于没有消费者存在,最终消息丢失了,这样说明交换机没有存储消息的能力。发送到交换机的消息,只会路由到与其绑定的队列,因此仅仅创建队列是不够的,我们还需要将其与交换机绑定。据统计,目前国内消息队列使用最多的还是RabbitMQ,再加上其各方面都比较均衡,稳定性也好。的隔离特性,将不同项目隔离。

小林的博客 1997
上一篇: 七 Freemarker(项目实现)
下一篇: (一)Spring启动过程(概括)
香草星冰乐
博客等级 码龄7年 21粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值