消息中间件 activeMQ的源码分析 之 开篇

ActiveMQ实战源码详解与应用 本文还有配套的精品资源,点击获取 简介:《ActiveMQ in Action》一书详细介绍了如何在实际项目中使用Apache ActiveMQ作为消息中间件。特别是通过"stock portfolio"(股票投资组合)和"job queue"(工作队列)两个实例,解释了ActiveMQ的核心技术如消息模型、格式、过滤、持久化、消费者竞争、工作队列模式、并发处理、优先级队列... 阅读详情

 以前对JMS尤其是activeMQ不了解,一看到什么地方需要使用消息中间件,就比较反感。主要原因是感觉JMS的实现都比较复杂,怕在真实使用过程中出现什么问题时会比较被动。所以,我们基本上是自己写类似的消息中间件,当然功能非常简单。但其实我们自己写出来的中间件,随着功能的不断增加、人员和时间的种种问题,导致最终我们自己做出来的所谓消息中间件越来越不能维护。在吸取了一次一次这种重复发明"轮子"的事情中,我们觉得也许一开始就采用成熟开源的产品也许是条更好的方式。 
    感觉到现在或将来我们对JMS的使用会更加深入,为了适应这种的需要,作为软件研发人员,需要对在我们工作中占有重要地位的开源产品有源代码级别的熟悉,尤其对我们这些英语不太好的,因为目前用的多的开源产品基本上是以英语作为基础的,那么我们想要提交一个bug或讨论一个什么用法的时候,就比较被动,而且眼巴巴的等着其他人来解决,自己一点都 
使不上劲的感觉真的很不舒服。 
    我们选择activeMQ来分析它的核心架构、源代码,就是希望能尽量少的发生上面的情况,尤其在我们分析activeMQ的过程中,发现其源代码中确实存在不少小问题。消息中间件在许多项目或产品中占有非常重要的地位,虽然我们目前还不是activeMQ的代码提交人员,但希望通过对activeMQ的源码分析这种方式,同样为使用activeMQ的同行们提供一点帮助,也算是间接为开源做点事情。 
    在后面的一系列文章中,我们将主要从如下几个方面来分析:    
   一、activeMQ的核心线程的功能和生命周期 
   二、消息存储的kaha实现的分析
   三、消息队列(Queue)实现的分析

   四、activeMQ的领域模型
   五、activeMQ中TCP通讯机制
   六、activeMQ的Cluster
   七、activeMQ中内存使用和管理
    作为开篇,首先我们非常尊重activeMQ的所有committer,它是个不错的软件作品,我们的分析是基于5.1版本的代码,就象任何事情一样,尤其是软件产品它的成熟是需要较长时间的过程,我们也会把分析中发现的5.1版本的bug于大家分享,下面我就以一个小bug作为整个activeMQ分析的开篇。 
    为了表述的方便,我们把这个bug叫做bug_1,为了讲清楚该bug,首先我会把相关的背景做一个介绍: 
    消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法。消息中间件的实现一般都是当消息消费者准备好消费消息的时候,它会从持久化 
存储中一批一批的读取消息,并发送给消费者。消息指针维护着下一批待读取消息的相关位置信息。 
    消息指针在对不同的消息消费者时,它的内部处理机制也不一样: 
    1.当消费者跟得上消息生产者的时候,是快消费者。那这种时候Message cursor的内部过程如下图所示: 

    2.当消费者慢于消息生产者的时候,是慢消费者。那这种时候Message cursor的内部过程如下图所示:


    上面两种情况是能自动调整的,当一个消费者从快变成慢或从慢变成快的时候,Message cursor应该做自动的调整,在5.1里面这种自动调整有点小bug,它只能从快变成慢,反之则不行。具体bug原因应该是疏忽写错了,代码在类AbstractStoreCursor中的public final synchronized void remove()方法中的if (size==0 && isStarted() && cacheEnabled)这一行,只用把cacheEnabled改为useCache就可以了。(该bug已经被后续版本所修复) 
    我们非常愿意能推动activeMQ的使用,并希望能够结合activeMQ做一些相关的辅助工作。所以如果大家在实际工作中碰到使用activeMQ的各种问题,如群集,消息重发等等,都可以告诉我们,大家一起交流,同时我们也会在线下召开一些交流activeMQ使用和研究的聚会,我们的联系方式:email: yunweitec@yahoo.cn   qq号码:ActiveMQ研究群 62835781


原文链接:http://blog.youkuaiyun.com/kongqz/article/details/4014788

activeMQ 详细教程与源码(包含消费者与生产者) activeMQ 详细教程与源码(包含消费者与生产者),下载可根据文档修改配置文件后进行测试 立即下载

相关推荐

基于STM32F103标准库与DMA的实时音频FFT频谱显示系统设计

本文详细介绍了基于STM32F103芯片与DMA技术实现实时音频FFT频谱显示系统的设计方法。通过标准库驱动和FFT算法处理音频信号,结合OLED显示屏实时绘制音乐频谱,涵盖硬件选型、核心原理、开发环境搭建及性能优化等关键步骤,为数字信号处理应用提供实用参考。

yellow的专栏 777

activemq基础篇3--源码分析2

activemq的优缺点: activemq采用消息推送方式 ,所以最适合的场景是默认消息都可以在短时间内被消费,数据量越大,查找和消费消息就越慢,消息堆积程度与消息速度成反比。 缺点: 1)吞吐量低。由于activemq需要建立索引,导致吞吐量下降,这是无法克服的缺点,只要使用完全符合jms规范的消息中间件,就要接受这个级别的TPS. 2)没有分片...

zy345293721的博客 581

共享单车需求预测问题:建模篇

机器学习训练营——机器学习爱好者的自由交流空间(qq群号:696721295) 在上一篇里,我们使用可视化的方法分析了“共享单车”的数据集,理解了特征(变量)之间的关系。我们将在本篇建立几个模型预测单车的需求量,并比较它们的预测效果。 随机森林填充法 首先,导入必需的库、训练集和检验集。 import pylab import calendar import numpy as np impor...

wong2016的博客 1万+

activeMQ的源码分析

我们将主要从如下几个方面来分析: 一、activeMQ的核心线程的功能和生命周期 二、消息存储的kaha实现的分析 三、消息队列(Queue)实现的分析 作为开篇,首先我们非常尊重activeMQ的所有committer,它是个不错的软件作品,我们的分析是基于5.1版本的代码,就象任何事情一样,尤 其是软件产品它的成熟是需要较长时间的过程,我们也会把分析中发现的5.1版本的bug于大家

jeff lee的专栏 1506

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 420

消息中间件ActiveMq(代码实现)

一对一: 首先配置pom: <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> ...

陈福国的博客 436

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2651

开始activeMQ的源码分析

公司的各个产品显然是一种分布式的架构方式了。现在系统之间整合成为最大的问题。尤其是在消息传递方面,是一个最大的问题。 现有的方式是采用触发器在数据源中将变动的数据触发到一个表中,然后将其打包成xml。通过webservice方式发送到目标库中。然后目标库进行解析xml,更新目标数据库。 这样,目标和源的数据结构我们都需要了解,而且,源数据发生变动之后,需要对目标进行变更。也就是直接操作目标数据

DaemonSu 4276

12、硬件工程师笔试面试——MOS管(2025版本)

在设计和测试过程中,可以参考相关的EMC测试标准和指南,如CE认证EMC电磁兼容测试介绍 和电磁兼容性(EMC)测试方法与整改指南 ,以及电磁兼容(EMC)的标准与测试内容 ,来确保MOSFET的EMC性能符合行业标准。在高频应用中,MOSFET的开关速度对电路的整体性能至关重要。是一款高电压同步N沟道MOSFET驱动器,具有自举电源电压至114V的能力,宽VCC电压范围,自适应贯通保护功能,以及高达1.4A的峰值顶端栅极上拉电流,适用于分布式电源架构、汽车电源、高密度电源模块和电信系统等应用。

XU157303764的博客 7093

仿真模型简单介绍

同时,各种以伯克利的Spice仿真程序的算法为核心的商用Spice电路仿真工具也随之产生,运行在PC和UNIX平台,许多都是基于原始的SPICE2G6版的源代码,这是一个公开发表的版本,它们都在Spice的基础上做了很多实用化的工作,比较常见的Spice仿真软件有HSpice、Pspice、Spectre、Tspice、SmartSpcie、IsSpice等,虽然它们的核心算法雷同,但仿真速度、精度和收敛性却不一样,其中以Synopsys公司的Hspice和Cadence公司的Pspice最为著名。...

小幽余生不加糖 8002

主题:消息中间件 activeMQ的源码分析 之 开篇

<br /><br />  以前对JMS尤其是activeMQ不了解,一看到什么地方需要使用消息中间件,就比较反感。主要原因是感觉JMS的实现都比较复杂,怕在真实使用过程中出现什么问题时会比较被动。所以,我们基本上是自己写类似的消息中间件,当然功能非常简单。但其实我们自己写出来的中间件,随着功能的不断增加、人员和时间的种种问题,导致最终我们自己做出来的所谓消息中间件越来越不能维护。在吸取了一次一次这种重复发明"轮子"的事情中,我们觉得也许一开始就采用成熟开源的产品也许是条更好的方式。 <br />    感

xiechao240的专栏 1439

ArcGIS实验教程——实验二十五:大型商场选址经典案例

本实验基于ArcGIS平台进行商场选址分析,综合考虑道路、居民点、停车场和已有商场四个影响因素。通过缓冲区分析建立各要素的影响范围(道路50米、居民点100米、停车场100米、已有商场500米),采用叠加分析中的相交和擦除运算确定最优选址区域。实验建立了区位评价体系,通过属性赋值(1/-1)和联合运算生成综合评价结果,并实现分级可视化显示。注意事项包括距离参数设置对结果的影响以及正确选择空间分析工具。该流程为商业选址提供了科学的GIS解决方案。

智慧空间实验室 1万+

消息中间件-ActiveMQ

ActiveMQ遵循jms协议,是Apache开源的消息中间件系统。源码还在研究中。 网上有很多相应的小Demo,在此不再赘述。先给出嵌入式启动broker的一种例子: package com.z; import java.io.File; import java.net.URI; import org.apache.activemq.broker.BrokerService; impor

裴珏的专栏 828

深度学习工具包 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")

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分布式消息中间件 ActiveMQ-秒杀阿里面试

本章重点: 1.消息发送源码分析 2.消费端源码分析 3.持久化存储支持的五种类型 4.prefetchSize原理 5.ActiveMQ优缺点及使用场景 消息中间件产生背景: 使用多线程可以实现异步化,并行处理数据; 使用MQ不仅满足多线程这些特点,因为它具有:异步,解耦,流量削峰,数据持久化存储,高性能,高可用,可伸缩特性,并且在弱一致性事务中,可以通过最大努力通知实现分...

须臾-code 1228

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ActiveMQ源码分析之开篇

时间如白驹过隙,一眨眼的功夫距离上次写博客的时间已经过去两年多了。为了回馈广大顾客,决定将最近整理的东西分享给大家,哈哈哈。虽然年龄已经不小,但还是要保持年轻,乐观的心态。最近将ActiveMQ源码涉猎了下,虽然这款MQ中间件年龄已经比较大了,而且市面上也出现了很多更优秀的MQ产品,如kafka,RocketMQ,RabbitMQ等。但是仍然有较多厂商在使用ActiveMQ,而且关于AMQ(以下A...

程旭元的博客 338

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

5.ActiveMQ消息发送【源码分析】

如需了解消息发送策略【同步发送 & 异步发送】,请移步:ActiveMQ消息发送策略 ActiveMQ消息发送源码分析 我们可以从消息发送端的producer.send()出发,开始分析源码: TextMessage message = session.createTextMessage("Hello ActiveMQ:" + i); producer.send(message...

扛麻袋的少年的博客 2307

消息中间件 activeMQ的源码分析 之 TCP通讯机制

activeMQ支持多种通讯协议TCP/UDP等,我们选取最常用的TCP来分析activeMQ的通讯机制。首先我们来明确一个概念:  客户(Client):消息的生产者、消费者对activeMQ来说都叫作客户。  消息中转器(Message broker):它是activeMQ的核心,它接收信息并进行相关处理后分发给消息消费者。      为了能清楚的描述出activeMQ的核心通讯机制,我

朱智文的专栏 933

阿里消息中间件之JMS实践(ActiveMQ)

1、消息中间件作用作为一个消息传递中间层,方便信息发送者和接受者通信。2、消息中间件好处1、信息解耦:信息发送方和接收方通过中间件通信,不需要直接通信。2、异步:消息被中间件处理,发送方和接收方都不用直接通信。3、安全可靠:中间件做的还是很可靠地。。4、横向扩展:支持多信息发送方和接收方5、顺序保证:中间件功能。3、常见消息中间件JMS(Java Message Service):java平台中面...

Java烂猪皮 529

8.ActiveMQ消费端【消息消费原理 && 源码分析】

本文源码部分内容,涉及到ActiveMQ消息发送端源码相关内容,如需了解ActiveMQ消息发送端内容以及源码解析,请移步: [传送门]ActiveMQ消息发送策略【同步发送 && 异步发送】 [传送门] ActiveMQ消息发送【源码分析】 1.消费端消费消息原理 ActiveMQ消费端,有两种方法可以来接收消息: ①使用同步阻塞的Messag...

扛麻袋的少年的博客 2483

activemq基础篇1--引入activemq的好处

消息中间件的初步认识 消息中间件是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信。 消息中间件能做什么? 消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各平台以及协议之间的特性,实现应用程序之间的协同。举个例子,一个电商平台的注册功能来简单分析...

zy345293721的博客 907

消息中间件之JMS实践(ActiveMQ)

1、消息中间件作用作为一个消息传递中间层,方便信息发送者和接受者通信。2、消息中间件好处1、信息解耦:信息发送方和接收方通过中间件通信,不需要直接通信。2、异步:消息被中间件处理,发送方和接收方都不用直接通信。3、安全可靠:中间件做的还是很可靠地。。4、横向扩展:支持多信息发送方和接收方5、顺序保证:中间件功能。3、常见消息中间件JMS(Java Message Service):java平台中面...

weixin_33795806的博客 173

ActiveMQ --- 入门篇

MQ,中文名字叫做消息中间件。既然是中间件,那么就说明它左边有东西,右边也有东西。那么左边是什么?右边又是什么呢?MQ在中间能干嘛呢?看看下面的例子。1、生活中的case: 老师讲完了练习,然后对同学们说有问题的现在就过来问。然后张三李四王五赵六都有问题要问。那么他们就按顺序排队。张三需要5分钟,然后是李四8分钟,再然后才是王五10分钟,最后是赵六。这就相当于dubbo的RPC远程调用。也就是说,张三问的时候老师这个系统只能响应张三,后面的人都得等着。这样就会导致学生和老师耦合度高,而且效率低,如果问问题的

2745

activemq基础2---源码分析

持久化消息和非持久化消息的发送策略 Activemq支持同步,异步两种发送模式将消息发送到broker上。 同步发送过程中,发送者发送一条消息会阻塞到broker反馈一个确认消息,表示消息已经被broker处理,这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客户端消息发送的性能; 异步发送过程中,发送者不需要等待broker提供反馈,所以性能相...

zy345293721的博客 1140
上一篇: Apache Commons-pool实现对象池(包括带key对象池)
下一篇: memcache client for java
乐动心情
博客等级 码龄16年 36粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值