前言

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

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

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

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

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

应用场景

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

优点

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

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

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

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

缺点

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

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

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

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

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

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

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

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

  1. 以ActiveMQ为例JAVA消息中间件学习【2】

    前言 之前我们学习了什么是消息中间件,以ActiveMQ为例做了一个最简单的消息中间件的实现.但是我们做的就只能算是个例子而已,因为在实际的项目中肯定会有spring插一脚,所以spring肯定有来管 ...

  2. 以ActiveMQ为例JAVA消息中间件学习【1】

    前言 在慢慢的接触大型的javaweb的项目就会接触到很多的中间件系统. 其中消息中间件在很多场景下会被运用. 这里主要就对最近所学习到的消息中间件知识做一个笔记,为以后的实际运用打下一个良好的基础. ...

  3. 以ActiveMQ为例JAVA消息中间件学习【3】——SpringBoot中使用ActiveMQ

    前言 首先我们在java环境中使用了ActiveMQ,然后我们又在Spring中使用了ActiveMQ 本来这样已经可以了,但是最近SpringBoot也来了.所以在其中也需要使用试试. 可以提前透露 ...

  4. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

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

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  6. Java多线程学习笔记

    进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...

  7. Java Web学习系列——Maven Web项目中集成使用Spring

    参考Java Web学习系列——创建基于Maven的Web项目一文,创建一个名为LockMIS的Maven Web项目. 添加依赖Jar包 推荐在http://mvnrepository.com/.h ...

  8. Android(java)学习笔记207:开源项目使用之gif view

    1. 由于android没有自带的gif动画,我在Android(java)学习笔记198:Android下的帧动画(Drawable Animation) 播客中提到可以使用AnimationVie ...

  9. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

随机推荐

  1. c#mysql批量更新的两种方法

    总体而言update 更新上传速度还是慢. 1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1 ...

  2. 设置textfield 文字左边距

    默认情况下,当向textField输入文字时,文字会紧贴在textField左边框上.我们可以通过设置textField的leftView,设置一个只有宽度的leftView.这样还不够,因为默认le ...

  3. redis持久化详述

    本来打算根据自己搜索的一些文章写些总结,后来发现了一篇好文,这里转载下,在自己博客里面记录下. 原文链接:https://www.cnblogs.com/kismetv/p/9137897.html ...

  4. boost asio 学习(二)了解boost::bind

    2.了解boost::bind使用boost::bind封装一个函数,考虑以下例子示例2a #include <iostream> #include <boost/bind.hpp& ...

  5. uni-app开发一次,覆盖多端的前端框架

    uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台. 一套代码,运行多个平台 uni-app实现了一套代码, ...

  6. 【转】机器学习在B2B的应用

    原文地址:http://www.mbtmag.com/blog/2017/04/artificial-intelligence-making-it-work-industrial-companies? ...

  7. javascript 错误监控

    一.错误分类 1,即使运行错误:代码错误, 2.资源加载错误 二. 错误的捕获方式 1.即使运行错误的捕获方式 a. try catch       b.window.onerror 2.资源加载错误 ...

  8. JQuery续

    一.表单属性选择器 :enabled :disabled :checked :selected <body> <form> <input type="check ...

  9. 2018.09.22 上海大学技术分享 - An Introduction To Go Programming Language

    老实说笔者学习 Go 的时间并不长,积淀也不深厚,这次因缘巧合,同组的同事以前是上海大学的开源社区推动者之一,同时我们也抱着部分宣传公司和技术分享的意图,更进一步的,也是对所学做一个总结,所以拟定了这 ...

  10. 剑指offer编程题Java实现——面试题10二进制中1的个数

    题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变 ...