c语言java中间键,《大型网站系统与Java中间件实践》-消息中间件

news/2024/5/20 14:17:14/文章来源:https://blog.csdn.net/weixin_39820997/article/details/117128226

1. 消息系统的价值

1.1没有消息系统的时候

假设你负责系统的用户注册模块开发,突然有一天接到产品的要求让你增加注册成功之后发短信任务,此时你屁颠屁颠的找到用户注册部分的代码,然后你快速的在代码后面加上调用短信服务的代码,心满意足的提交了。又过了几天,心得需求是增加注册送积分活动,然后,呵呵......

df0afc263f81

服务直接调用

1.2引入消息系统

用户注册成功时,发送消息给消息中间件,其他系统向消息中间件订阅这个消息,完成相应工作。通过消息中间件的解耦,注册系统不关心有多少系统需要知道注册成功这件事,也不用关心如何通知它们,只需要把登录成功这件事转化为一个消息发送到消息中间件。这样,需要了解登录成功这件事的系统自己去消息中间件订阅就行。

df0afc263f81

消息中间件对服务解耦

2. 互联网时代的消息中间件

消息中间件的两个重要特点解耦和异步。需要思考的问题:消息的顺序保证、扩展性、可靠性、业务操作与消息发送的一致性,以及多集群订阅者问题。

2.1消息发送的一致性

df0afc263f81

最终一致性正流向

异常分析:

业务应用发送消息给消息中间件。如果失败,业务操作没有做,消息也没有存储在消息中间件,业务操作和消息的状态是一致的,没有问题。

消息中间件把消息入库。如果失败,可能情况:消息中间件失效,应用收不到返回结果;插入消息失败,收到返回失败结果给应用。

业务应用收到消息中间件结果异常。如果有业务应用正常,业务应用不知道在消息中间件的处理结果,按照失败来处理,如果入库成功,就会造成不一致;

如果业务应用自身有问题,消息入库成功,也会造成不一致;如果入库失败,则还是一致的。

业务应用进行业务操作。

业务应用发送业务操作结果给消息中间件。如果出现问题,消息中间件不知道如何操作存储的消息,可能会造成不一致。

消息中间件更新消息状态。出现问题同上。

从业务应用的视角分析异常情况:

异常情况

可能的状态

发送消息给消息中间件失败

业务操作未进行,消息未存储

消息发出后没有收到消息中间件响应

业务操作未进行,消息存储,待处理

业务操作未进行,消息未存储

收到消息中间件返回成功,业务操作失败

业务操作未进行,消息存储,待处理

从消息中间件的视角分析异常情况:

异常情况

可能的状态

没有收到业务应用的业务操作结果

业务操作未进行,消息存储,待处理

业务操作未进行(操作完又回滚),消息存储,待处理

业务操作成功,消息存储,待处理

收到业务应用的业务处理结果,更新消息状态失败

业务操作未进行,消息存储,待处理

业务操作未进行(操作完又回滚),消息存储,待处理

业务操作成功,消息存储,待处理

各种异常情况状态:

业务操作未进行,消息未存储

业务操作未进行,消息存储,状态待处理

业务操作成功,消息存储,状态待处理

情况1,无需处理,因为本身一致;情况2和情况3需要进行补偿。

df0afc263f81

最终一致性补偿流程

最终一致性接口封装伪代码:

发送消息给消息中间件

获取返回结果

如果失败,返回失败

进行业务操作

获取业务操作结果

发送业务操作结果给消息中间件

返回处理结果

可以把实现逻辑封装在一个调用中,然后把业务操作包装成一个对象传进来,然后整个流程就可以控制在这个方法中。

2.2消息中间件与使用者的强依赖问题

如果消息中间件系统出现问题,就会导致业务操作无法继续执行。

2.3消息重复投递

分布式事务:实现复杂

接收者消息处理幂等性:降低消息中间件复杂,增加接受者门槛

2.4消息优先级

局部顺序:和某件事相关的多条消息之间有顺序,创建->付款->发货->确认。

3结束

章节中很多是作者解决问题的思路和实践,所以很多就略过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_769460.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络连接异常、网站服务器失去响应_新型DoS攻击或对使用了CDN的网站产生巨大威胁...

在当今全球网络中,CDN服务扮演着很重要的角色,它的缓存系统可以极大缓解原网站的压力,并给访问者提供更好的网络体验。但近期,有安全研究人员发现了一种针对CDN缓存功能的DoS攻击——CPDoS,它有多种变体,不…

nand flash多少次写_这个比QQ空间还古老的网站,是多少网友的精神家园?

你多久没有上网冲浪了?你还记得第一次和因特网的亲密接触吗?仔细算算那些诞生于 1999 年的网站,已经过了二十岁了。这些网站就像一座孤岛,在飞速发展的网络时代,这么多年来一直坚守着自己 QQ 空间式文艺复兴的设计。二…

php网站建设步骤,「php环境搭建」简单6个步骤教会你快速搭建一个网站(windows环境) - seo实验室...

php环境搭建三、配置php环境1、同样php模块选择也是免安装版,直接解压到自己习惯的文件夹中配置即可,提醒站长在官网上下载的时候也要注意系统和VC环境支持。解压路径如下图:进入php的解压目录,找到php.ini-production或者php.ini…

二次元论坛php,Discuz动漫二次元风格网站模板商业版

模板简介Discuz动漫二次元风格网站模板商业版,GBK商业版。1、本模板为门户论坛个人空间形式,其中个人空间模板需要单独购买,点击购买,美化N多默认模板页面2、全新设计的标签页,标签页帖子图文调用3、论坛首页&#xff…

Linux 网站部署——如何部署自己的论坛网站(简单易上手)

首先我们需要部署自己的网站需要的几个工具及服务: 1.云服务器 阿里云、华为云、腾讯云都可以,记下自己的IP地址; 2.X-shell工具; 3.代码包(在这里我们以部署一个开源的BBS网站为例子)。 首先&#xff0c…

Linux网站部署——从零到一部署一个自己的电商网站

上一篇关于部署论坛的网站已经发出,这次我们来部署一下电商网站,前期的准备工作请参考上篇文章:https://editor.csdn.net/md/?articleId114901490 我在这里直接借用了一个云服务器。如果还是自己服务器的同学可以直接使用我们的第一条命令&…

Linux网站服务——静态站点动态站点

网站服务 概念: 网站(Website)是指在因特网上根据一定的规则,使用HTML(标准通用标记语言)等工具制作的用于展示特定内容相关网页的集合。简单地说,网站是一种工具,人们可以通过网站来提供相关的网络服务。…

Linux部署网站域名服务——DNS网站搭建域名购买

概念 域名服务作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。 hosts文件(互联网发展初期的服务) windows系统 C:\Windows\System32\drivers\etc\host…

Linux HTTP网站——网站基础服务详解

HTTP HTTP(Hyper Text Transfer Protocol)超文本传输协议,用于万维网WWW.(World Wide Web)与浏览器的传输协议。(基于TCP/IP通信协议) HTTP工作原理 http协议工作于客户端、服务端架构上&#…

Linux NginxHTTPS——HTTPS介绍、加密算法、SSL协议、HTTP风险、Nginx HTTPS部署(安全的网站部署)

HTTPS介绍 HTTPS(HyperText Transfer Protocol over Secure Socket Layer),Google 为了保证数据安全很早就开始启用了。 近些年互联网巨头,开始大力推行 HTTPS, 国内外的大型互联网公司基本也都已经启用了全站 HTTPS。…

一章——Web网站服务(一)(应用—linux高级管理)

三期总目录链接 目录 1、Apache 的起源 2、准备工作centOS7机器一台 3、把httpd添加为系统服务 4、httpd服务和 dns服务结合使用 域名访问网站 就www.aaa.com为例 常用的全局配置参数 常用的全局配置参数(续) Require配置项的常见语法 1、Apach…

二章——Web 网站服务(二)(应用——linux高级管理)

三期总目录链接 目录 一、基本理论 (一)、客户机地址限制 (二)、用户授权限制 二、实验要求 1、默认情况 2、只允许客户端192.168.1.200访问网站应该如何修改配置文件并验证 3、进行用户授权配置,允许aaa 和bo…

二章——Web网站服务(二)2.2(应用——linux高级管理)

三期总目录链接 目录 一、构建虚拟Web主机 案例1: 构建www.a1.com 和www.a1.com 这种基于域名的虚拟主机 案例2:构建基于地址的虚拟主机 (192.168.1.2 和 192.168.1.12) 案例3: 添加基于端口的虚拟主机 &#xf…

四章——Nginx网站服务(应用——linux防护与群集)

三期总目录链接 目录 一、Nginx服务 1、安装及运行控制 2、配置文件nginx.conf 2.1全局配置 解释: 2.2 I/O事件配置 解释: 2.3 HTTP配置 解释: 3、访问状态统计及虚拟主机应用 二、LNMP架构及应用部署 1、搭建LNMP网站平台 1.1…

rust全息要啥才能做_网站优化要怎么做才能排名靠前-乐云SEO

对于一个网站来说,网站优化是重要的,只有在搜索引擎中的关键词排名靠前才能获得更多的点击量。一个没有用户点击量的网站,即使它是完美的,是徒劳的。那么,我们如何在百度或其他搜索引擎的主页上获得网站的关键词排名呢…

实验楼网站mysql_进阶篇 - MySQL 常用查询

实验9 进阶篇-MySQL常用查询一、简介1. 内容:通过一个经销商数据库实例学习并实践多种在数据库中查找记录的方法。2. 知识点:表查询操作。二、步骤1. 启动并连接MySQL。创建切换数据库。创建表并插入数据。mysql> CREATE TABLE shop (-> article I…

java 爬虫 登陆_Java 爬虫遇到需要登录的网站,该怎么办?

这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫。在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录的网站,我们该怎么办&…

php行业八卦,Phpwind肖睿哲:与网站主合作信任最重要

(图为:Phpwind副总裁肖睿哲)【TechWeb消息】12月4日下午消息,Phpwind副总裁肖睿哲在“2010年中国地方与行业网站高峰论坛”上接受TechWeb专访时表示,与新浪微博合作产生利益之后,网站主将会与新浪微博七三分成,“Phpwi…

java请求爬取https网站报错javax.net.ssl.SSLHandshakeException的解决办法

前言 在爬取https网站的时候,今天遇到了一个之前没有见过的异常javax.net.ssl.SSLHandshakeException,具体细节请看如图 2020-06-01 23:18:17.032 DEBUG org.springframework.web.servlet.DispatcherServlet - Successfully completed request javax.ne…

不同网站不同网卡_不同时代网站设计制作的技巧

对于大多数网页设计师来说,基于特定的目标受众来计划一个网站设计项目是显而易见的。它可能是为那些喜欢苏打水或购买电子游戏或对运动鞋有亲和力的人。但是另一个需要考虑的问题经常被忽略——为不同的时代的用户设计。年龄会影响用户如何使用网站、应用程序和移动…