以ActiveMQ为例JAVA消息中间件学习【4】——消息中间件实际应用场景

前言

当前真正学习消息中间件,当前已经走到了,可以简单的使用,网上有很多那种复杂的高可用的架构,但是那些都是对于一些比较大型的项目来说的。

对于一些小型的项目可能用不到那么大的架构,于是我们需要从最简单的入手。

一个是要让我们明白,什么样的情况下我们会使用到消息中间件,应该使用消息的哪一种模式。

一个是要明白,使用消息中间件会有什么好处,同时会带来什么样的弊端。

最后要会举一反三,这样的情况我们可以使用消息中间件,那么以后实际项目中肯定不会有一模一样的场景,那么那样的场景可以使用,或者说使用效果最好。

应用场景

先列举所有应用场景,然后挑几个重点进行实际代码的模拟。

我在网上找了一圈,发现文字描述中一共有五个大的方向。

异步处理,应用解耦,流量削锋,日志处理和消息通讯。

异步处理:是指把原本直接调用接口拿到返回值的方式转变成异步的发送消息,然后接收到消息后执行。

应用解耦:是指将原来的多步的连续操作,分开,分成多个消息发送,然后分别执行,互相之间没有耦合了。

流量削锋:是指将原来的高并发直接操作数据库的请求变成消息队列保存起来,然后之后依次慢慢执行。

日志处理:是指将不同服务器的日志通过消息的形式发送,然后统一进行维护打印和管理。

消息通讯:是指发送通信消息的时候使用消息中间件维护队列,比如你聊qq的时候,一个说一句,就能维护在一个消息队列中让消息有次序的排列,或者是走订阅通知的形式的消息通讯。

然后我找了一些了一些产品(先说明我不是打广告啊,不喜欢你就跳过就行了)

阿里云有消息中间件的产品卖,我看了一下

他们提供的应用场景是这些

分布式事务是指:原来在一个项目中可以实现一个事务执行到底,但是当项目很大牵扯多个数据库多个项目的时候,要保证事务的一致性,那么就需要做分布式的事务,简单说就是保证多个项目的不同操作同时成功,同时失败。

物联网应用跟我们没啥关系,有兴趣可以自己去了解。

实时计算是指:通过数据总线接收需要处理的数据,然后进行数据计算,最后统一存储,一条龙服务,强调的是实时性。

大规格缓存同步:其实就是缓存同步,使用订阅模式,让一个修改同时作用于多个缓存。

我觉得这样下来基本上所有常用的应用场景都包括进去了。

优点

其实我们看见消息中间件的使用场景,基本已经明白了它所处的优点,其中解耦是其中一个重要的优点,将业务拆分。

然后是异步,把以前同步处理的形式转换成异步的。

是横向扩展,可以有多台服务器去消费消息,扩展方便。

顺序保证,因为是队列的形式,那么消息肯定得乖乖排队,所以一定会有一个先后顺序,从而保证一些场景使用安全。

缺点

消息中间件肯定会有瓶颈,当队列到达一定的数量处理的时间等会出现问题。

当消息中间件本身出现问题,或者因为服务器宕机等问题,消息中间件停止运行。

网上有很多在使用消息中间件时丢失消息的说法,虽然实际我没有遇到过,但是我也不能100%保证没有问题。

消息重复发送或者被重复处理时怎么办?消息幂等性的问题。

消息发送不成功是否会影响当前业务。

其他问题本人经验不足还在学习,等实际使用之后,再做出总结。

对于高可用,分布式的架构处理,以后还会进行深入的学习。

时间: 2024-07-31 22:59:46

以ActiveMQ为例JAVA消息中间件学习【4】——消息中间件实际应用场景的相关文章

JAVA web学习例程源码分享

JAVA web学习例程源码分享JAVA web学习例程源码分享我自己也从里面学习到了很多东西! 1.BBS论坛系统(jsp+sql)2.ERP管理系统(jsp+servlet)3.OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR)4.博客系统(struts+hibernate+spring)5.车辆管理系统(struts+hibernate+spring+oracle)6.家庭理财系统(java+applet)7.教材订购系统(jsp+servlet

Java后端学习

学习路线: Java基础--->HTML/CSS/JS(前端页面)--->Servlet/JSP(J2EE)(马士兵的视频).Mysql(数据库) --->Java Web框架(spring.springmvc.mybatis) ---找到工作:Java基础的升级版---<Java编程思想> ---1~2年:看设计模式---<大话设计模式>,写博客(还需要看:代码编写优化的书.比如<重构 改善既有代码的设计>,<effective java>

Java工程师学习指南(完结篇)

Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校生,所以写的内容主要还是针对Java初学者或者接触Java后端不久的朋友,不适用于已经工作多年的Java大佬们.所以本文中的方法不一定适合所有人,如有错误还请谅解. 本期的内容是系列文章的最后一部分内容了.这个系列可能还有很多东西没有说清楚,也有很多内容被忽略了.但是这些内容也确实是笔者结合自己经验

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];    

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

ActiveMq整理之java应用

一.JMS 更多介绍参考 "http://baike.baidu.com/link?url=LNCEOGgqEX-uSKuRJooyG1RSfS7CTWDKYT8OOouhxLk_yWNN-0wNSWq7KjNQ259a9pfL95janJi8v8-drvdHqa" 1.1背景 当前,CORBA.DCOM.RMI等RPC中间件技术已广泛应用于各个领域.但是面对规模和复杂度越来越高的分布式系统,这些技术也显示出其局限性: 1.同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果才

Java反射学习总结

广州疯狂软件教育Java培训,iOS培训分享Class类是Reflection API中核心的类,他位于java.lang.Class列出一些常用的方法.- getName() : 获得类的完整名字- getFields() : 获得类的public类型的属性- getDeclaredFields() : 获得类的所有属性- getMethods() : 获得类的public类型的方法- getDeclaredMethods() : 获得类的所有方法- getMethod(String name

Java反射学习总结终(使用反射和注解模拟JUnit单元测试框架)

本文是Java反射学习总结系列的最后一篇了,这里贴出之前文章的链接,有兴趣的可以打开看看. http://blog.csdn.net/a396901990/article/category/2302221 本文介绍了如何利用反射和注解去简单的模拟JUnit4单元测试框架,之所以选择JUnit4是因为4.0以后最大的改进就是使用了注解.需要注意的是这里并不是完全的模拟,只是简单实现了一下Runner类和JUnit注解相关的工作流程.所以本文的主要目的是介绍反射和注解的使用.废话不多说,直接进入正文

Day06 Java基础学习笔记

面向对象 当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高.可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始改进,能不能把这些步骤和功能再进行封装,封装时根据不同的功能,进行不同的封装,功能类似的,或者有关联关系的封装在一起,这样结构就清晰了很多.用的时候,找到对应的类就可以了.这就是面向对象的思想. 比如,有如下三个人,每个人都有自己的功能:使用伪码体现 张三{ Public void 部署程序(){ System.out.println("部署java