rest_REST /使用提要发布事件

2023-12-27 14:40
文章标签 使用 事件 发布 rest 提要

本文主要是介绍rest_REST /使用提要发布事件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

rest

rest

处理事件

当使用多个解耦的服务时(例如,在微服务体系结构中),很有可能需要一种将某种域事件从一个服务发布到一个或多个其他服务的方法。

许多广泛采用的解决方案依赖于单独的基础结构来解决此问题(例如事件总线或消息队列)。

活动提要

解决此问题的另一种方法是使用提要。 RSS或ATOM之类的提要通常用于订阅网页。 每当将新文章发布到订阅的网页时,提要阅读器应用程序(例如,浏览器插件或移动应用程序)都可以将新文章通知用户。 提要阅读器通常会定期轮询提供的提要端点,以查看是否有新文章。

可以使用提要将事件发布到其他服务,而不是将新文章发布到RSS阅读器。 除了用于存储事件(您可能已经拥有)的标准数据库之外,这不需要任何其他基础结构。

RSS和ATOM都是XML格式,因此如果我们要提供JSON API,则不合适。 还有JSON Feed ,类似于RSS和ATOM,但使用JSON。 像RSS和ATOM一样,JSON Feed专注于网站内容,因此,许多(可选)提要和提要项属性对于发布域事件(例如faviconcontent_htmlimagebanner附件)不是很有用。 但是,JSON Feed具有简单的扩展机制,可让我们在Feed中定义自定义字段。 这些字段必须以下划线开头。 如果JSON Feed不能满足您的需求,您还可以提出自己的feed格式,这应该不难。

具有两个已发布域事件的示例JSON Feed可能如下所示:

 {"version" : " https://jsonfeed.org/version/1 " ,"title" : "user service events" ,"feed_url" : " http://userservice.myapi.com/events " ,"next_url" : " http://userservice.myapi.com/events?offset=2 " ,"items" : [{"id" : "42" ,"url" : " http://userservice.myapi.com/user/123 " ,"date_published" : "2020-05-01T14:00:00-07:00" ,"_type" : "NameChanged" ,"_data" : {"oldName" : "John Foo" ,"newName" : "John Bar"}}, {"id" : "43" ,"url" : " http://userservice.myapi.com/user/789 " ,"date_published" : "2020-05-02T17:00:00-03:00" ,"_type" : "UserDeleted" ,"_data" : {"name" : "Anna Smith" ,"email" : "anna@smith.com"}}]}

第一个事件(ID为42 )指示用户资源/ user / 123的名称已更改。 在_data块中,我们提供了一些可能对订户有用的附加事件信息。 第二个事件表明资源/ user / 789已被删除, _data块包含已删除的用户数据。 _type_data没有以JSON Feed格式定义,因此以下划线(JSON Feed扩展格式)开头。

提要属性next_url可用于提供某种分页。 它告诉客户端在当前提要中的所有事件都已处理后,在哪里可以查找更多事件。 我们的提要仅包含两个事件,因此我们告诉客户端使用偏移量参数2调用提要端点以获取下一个事件。

一般注意事项

如果您使用JSON Feed或使用自己的Feed格式,则在构建用于发布事件的Feed时应考虑以下一些常规事项:

提要项是不可变的

提要项表示域事件,它们是不可变的。 必要时,客户可以使用唯一的Feed项目ID来检查他们是否已经处理过Feed项目。

Feed项目订单未修改

提要中项目的顺序不变。 较新的项目会附加到Feed的末尾。

客户应该只能请求到目前为止尚未处理的提要项。

为避免客户需要一遍又一遍地处理所有提要项以查看是否有新项(例如,通过检查date_published项属性),提要应提供一种仅返回新项的方法。 使用JSON Feed时,可以通过next_url属性完成。

下图试图显示可能的next_url行为:

在第一个Feed请求中,只有两个事件可用。 两者均由服务器以及包含偏移量参数2的next_url一起返回。客户端处理完两个提要项目后,客户端将使用偏移量2请求下一个项目。没有新项目可用,因此没有内容的空提要服务器返回一个新的next_url 。 客户端会记住先前的next_url,并在稍后再重试该请求。 这次返回的是新项目,其更新的next_url包含偏移量3。

当然,您可以想出不同的方法来达到相同的结果。

和性能?

显然,从性能的角度来看,提要不能与任何高吞吐量的消息传递解决方案竞争。 但是,我认为对于许多用例来说就足够了。 如果它降低了系统的复杂性,那可能是一个值得权衡的问题。

要考虑的事情是:

  • 服务器创建的事件数
  • 供稿订户数
  • 与事件关联的数据量
  • 事件发布和处理之间的可接受延迟。 这定义了订户的轮询间隔

由于域事件具有不变性,因此可以在服务器上选择使用事件缓存来减少数据库查找。 长轮询和条件GET请求是减少网络负载的可能选项。

结论

提要提供了一种使用REST API将事件发布到其他系统的替代方法,除了用于存储事件的数据库外,无需其他基础结构。 您可以使用现有的Feed格式(如JSON Feed),也可以使用自己的自定义Feed格式。

由于提要的轮询性质,如果您有大量事件和很多消费者,则此解决方案可能不是最佳选择。

翻译自: https://www.javacodegeeks.com/2020/05/rest-using-feeds-to-publish-events.html

rest

这篇关于rest_REST /使用提要发布事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543460

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的