首页
学习
活动
专区
圈层
工具
发布

事件驱动架构设计之实现幂等的事件处理

或你可能使用通过HTTP提供REST API服务的第三方SaaS解决方案。在这些情况下,将事件驱动的微服务与请求/响应API集成并不罕见。这种集成引入了新的挑战,因为带来紧耦合问题。...示例 代码显示了一个响应重复请求时返回错误的集成请求/响应API。在这种情况下,重要的是识别重复错误和其他类型的错误。...考虑一个POST操作,它在处理重复请求时会返回422 UNPROCESSABLE_ENTITY错误,指出资源已经存在。.... */ } 5 结论 上述讨论表明,幂等的请求/响应API更容易集成。然而,非幂等的请求/响应API也可以以幂等的方式集成。如何集成非幂等API最终取决于上下文和API的设计。...无论API设计如何,重要的是通过提供合理的恢复选项来应对重复事件和重复请求。重试是不可避免的,事件处理包括请求/响应API应当是幂等的。 关注我,紧跟本系列专栏文章,咱们下篇再续!

21310

Bitly:构建月处理60亿点击的分布式系统

这个话题并不是针对Bitly的架构,这是一个关于分布式系统和如何使用分布式系统去解决一系列问题的本质探索。或许从他的发言中我最喜欢的是这句: SOA+队列+异步消息真的非常强大。...API请求、网页的用户界面等等。...其余的用来处理各种服务,如排序和组织用户数据,或者提供各种不同形式的处理和分析(数据库、metrics、网络爬取、文本分析等等) 每月爬1亿网页 来源 关于BITLY构建分布式系统的经验总结 平台...它是一个抽象,从代码来看更像是函数,但是是系统级别的。 你不需要记住系统的所有细节,只需要关注API边界与结构。 非常有益于开发和运营 Bitly是一个运行了6年的老公司,有很多的代码。...你并不需要查看每一行的代码,只需要运用这些服务。 设计良好的服务只有数百行的代码。 从运营上看,非常容易定位到哪个系统出现了问题,然后你可以仔细检查该系统来发现问题的所在。

1.2K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    十分钟学会reqests模块爬取数据——从爬取疫情数据说起

    在做疫情数据可视化的时候涉及到一些数据的爬取,一般python中爬取数据常用的就是requests和urllib,两者相比requests更加快速便捷。代码也更容易理解。...模块,本文略去各种介绍性文字,直接以实战代码来讲解。...,很幸运百度和腾讯都提供了数据接口百度APIi、腾讯API,我们以百度API为例,直接打开API地址发现是一个字典。...不管是通过response.content.decode("utf-8)的方式还是通过response.encoding="utf-8"的方式都可以避免乱码的问题发生。...API的情况下也就是找到了直接提供数据的网址,那如果有些消息找不到API呢,比如想爬取关于安徽省的新闻,这两个API都没有直接提供,然而https://yiqing.ahusmart.com/ 页面上就显示了有关安徽的新闻

    96220

    事件驱动的微服务架构API设计

    或你可能使用通过HTTP提供REST API服务的第三方SaaS解决方案。在这些情况下,将事件驱动的微服务与请求/响应API集成并不罕见。这种集成引入了新的挑战,因为带来紧耦合问题。...示例 代码显示了一个响应重复请求时返回错误的集成请求/响应API。在这种情况下,重要的是识别重复错误和其他类型的错误。...考虑一个POST操作,它在处理重复请求时会返回422 UNPROCESSABLE_ENTITY错误,指出资源已经存在。.... */ } 5 结论 上述讨论表明,幂等的请求/响应API更容易集成。然而,非幂等的请求/响应API也可以以幂等的方式集成。如何集成非幂等API最终取决于上下文和API的设计。...无论API设计如何,重要的是通过提供合理的恢复选项来应对重复事件和重复请求。重试是不可避免的,事件处理包括请求/响应API应当是幂等的。 请求/响应API的响应时间影响事件驱动微服务的性能。

    23210

    python爬虫从入门到放弃(四)之 Requests库的基本使用

    请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 response.text 之时,Requests 会使用其推测的文本编码。...response.encoding="utf-8"的方式都可以避免乱码的问题发生 各种请求方式 requests里提供个各种请求方式 import requests requests.post("http...添加headers 和前面我们将urllib模块的时候一样,我们同样可以定制headers的信息,如当我们直接通过requests请求知乎网站的时候,默认是无法访问的 import requests response...post请求的时候也可以和发送get请求一样通过headers参数传递一个字典类型的数据 响应 我们可以通过response获得很多属性,例子如下 import requests response =...session对象,两次请求都通过这个对象访问 证书验证 现在的很多网站都是https的方式访问,所以这个时候就涉及到证书的问题 import requests response = requests.get

    2.5K112

    讲一讲Web开发中的跨域

    最常见到的跨域「问题」是这样: 我有一个域名a.com和一个域名b.com 我在a.com上有一个接口a.com/api,会返回一些数据 我想在b.com域名下的一个页面上访问a.com/api得到数据...to_user=kindJeff&amout=1000 我写了一段ajax的post请求代码,请求连接是上面的url。...再想一想,浏览器不做script来源的跨域限制,而且大家都喜欢用JSONP并且改造了大量的api响应,问题不是回到了原点吗?...预检请求的响应需要带着与它们对应匹配的header和值,这样浏览器才会去请求跨域api。 预检请求的出现,是因为PUT等复杂操作通常是非幂等的。...关于CORS更具体的规则,可以在MDN查阅到详细的资料。 六、不让跨域请求?

    1.3K40

    VII Python(7)爬虫

    VII Python(7)爬虫 网络爬虫(网页蜘蛛): python访问互联网: urllib和urllib2模块(python2....*分urllib和urllib2;python3..4.1中把urllib和urllib2合并统一为一个包package,注意版本3是包不是模块); json模块(json轻量级的数据交换格式,此处对其应用是用字符串形式将...   #(对于打开的网页,可施加的方法或属性,geturl()得到访问的地址,info()返回的是文件对象(内容是请求的网页的代码),getcode()返回的是http的状态码) response.close...IP查詢"/>    我的ip,我的ip位址,我的ip位置,偵測我的ip,查詢我的ip,查看我的ip,顯示我的ip,whatis..._open(req, data)  File "/usr/local/python2.7/lib/python2.7/urllib2.py", line422, in _open    '_open',

    54020

    【Http】一文备忘Http状态码(406,415,422)

    4xx:客户端错误 406:Not acceptable,这表示API消费者请求的表述格式并不被Web API所支持,并且API不会提供默认的表述格式。...所以它通常是用来表示语意上有错误,通常就表示实体验证的错误。 5xx:服务器错误 ——摘自杨旭老师B站视频。 本篇重点关注状态码406和415,顺带看一下422。...如果请求没有Accept头: 使用第一个可以处理对象的格式化器来响应序列化 不执行任何协商,由ASP.NET Core决定返回的格式 Accept: */*,..,.....时,与在浏览器中的体验一致: 忽略Accept 若为另行配置,将会使用JSON返回内容 3.Server:“你给的我不要”——415 说回我们问题的初衷,报了415,我这边ajax设置的Content-Type...不是我想要的”——422 顺带提一下并不常用,但是却非常有用的状态码——422。

    3.2K10

    架构必备「RESTful API」设计技巧经验总结

    也就是说,我不需要为了得到类似的功能和结果而花费精力自己去创建一个与众不同的东西,上面提到的海明威的话正是代码重用在文学上的例子。...但是,我在这里不会写代码包的好处,而是更多地提一些我的感受,这些感受会在当前以及未来的项目中积极地得到实现。我还总结了一套API规则和原语,包括了功能和实现细节。...我喜欢使用这些状态码: 对于数据错误 400:请求信息不完整或无法解析。 422:请求信息完整,但无效。 404:资源不存在。 409:资源冲突。...要区分代码和描述,我打算将error(代码)作为机器可识别的常量,将description作为可更改的用于人类识别的字符串。点击这里有一篇http1.0和2.0的对比。...访问令牌用于认证所有未来的API请求,生命期短,不会被取消。 刷新令牌在初始登录的响应中返回,然后跟过期时间戳和与使用者的关系一起进行散列计算后存储到数据库中。

    2.7K30

    网站速度优化之“动静分离”、有效减轻后端服务器压力!

    对象存储COS和CDN每个月都有免费额度10G,新开通业务用户每个月还送50G流量包。我的建站理念就是:能不花钱的咱不花钱!花最少的钱做最大的提升!省下来的钱再花到那些不得不花钱的“刀刃”上!...最后提一下,腾讯云COS有V4和V5两个版本,现在新开业务用户一般都是V5版本,老用户可以直接工单申请体验V5版本。怎么用?...您可以使用控制台、API、SDK 等多种方式连接到腾讯云对象存储,实时存储和管理您的业务数据:[点我前往] 。...优点: api接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供api接口即可,可以为多个功能模块甚至是多个平台的功能使用,可以有效的节省后端人力,更便于功能维护。...JavaScript来完成,这就会导致网络爬虫得到的信息部分丢失。

    2.7K90

    浅入ABP(2):添加基础集成服务

    我非常讨厌一个 Action 的一个返回,就写一次消息的。 if(... ...) return xxxx("请求数据不能为空"); if(... ...)...使用抽象类,可以避免开发者直接 new 一个,强制要求一定的消息格式来响应。后面可以进行更多的尝试,来体会我这样设计的便利性。 跨域请求 这里我们将配置 Web 全局允许跨域请求。...上面的代码同时将其默认路由的前缀设置为 api/1.0。...模块已经在自己的 ConfigureServices 创建了 API 服务,因此可以不在 Web 模块里面编写这部分代码。...补充:为什么需要统一格式 首先,你看一下这样的代码: ? 在每个 Action 中,都充满了这种写法,每个相同的验证问题,在每个 Action 返回的文字都不一样,没有规范可言。

    2.2K30

    我们必须要知道的RESTful服务最佳实践

    URL API请求授权 1.REST的来源 REST:Representational State Transfer(表象层状态转变),如果没听说过REST,你一定以为是rest这个单词,刚开始我也是这样认为的...请求所需的一些信息都包含在URL的查询参数、header、body,服务端能够根据请求的各种参数,无需保存客户端的状态,将响应正确返回给客户端。无状态的特征大大提高的服务端的健壮性和可拓展性。...6.按需编码、可定制代码(可选) 服务端可选择临时给客户端下发一些功能代码让客户端来执行,从而定制和扩展客户端的某些功能。...3**请求被重定向、表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。 4** 请求错误这些状态代码表示请求可能出错,妨碍了服务器的处理。...多表、多参数连接查询如何设计URL 这是一个比较头痛的问题,在做单个实体的查询比较容易和规范操作,但是在实际的API并不是这么简单而已,这其中常常会设计到多表连接、多条件筛选、排序等。

    1.6K30

    小结HTTP状态码

    遇到复杂请求时候,浏览器会发送一个OPTION方法进行预处理返回响应。 关于复杂请求和简单请求,可以参考这篇文章CORS非简单请求。...备注:使用的最多的2xxs状态码是200和204,在遇到204状态码的时候,要注意一下自己发的请求是不是复杂请求。...如果是复杂请求,那么在得到204返回时,浏览器有没有接受了这个请求的返回,如果没有,要叫后端搞下相关配置了。...备注:这里要注意的是422,别请求链接一出错,就屁颠屁颠的找后端,先看下后端给过来的API文档中,要传的字段是否都准确跟上了。?...504 Gateway Timeout:网关超时,服务器未能快速的做出反应。请求接口返回pedding时间过长基本就是这个问题了,囧。 备注:遇到这类的问题,去问后端同学吧。

    1.4K20

    NanoMQ Newsletter 2022-08|v0.11:MQTT 5.0 + MQTT over QUIC 桥接,新增 HTTP API 监控客户端状态

    桥接功能更新作为 NanoMQ 最为广泛使用的功能之一,桥接功能本月得到重大更新升级,新增了 2 种桥接模式:MQTT over QUIC 桥接和 MQTT 5.0 协议桥接。...传输层的 0RTT 快速重连和被动地址切换等功能来克服网际漫游、弱网传输和 TCP 队头阻塞等各类常见的物联网连接问题。...HTTP API 更新通过 HTTP REST API 来对边缘服务进行监控和运维一直是广大普通用户的需求之一,NanoMQ 0.11 也新增了对当前连接的 MQTT 客户端信息的查询 API,方便第三方应用快速准确的获取所有客户端的在线情况...API 的请求和返回参数详情,请参阅 NanoMQ Docs(https://nanomq.io/docs/zh/latest/http-api/v4.html#客户端 )。...其他功能更新同时,NanoMQ 0.11 还响应用户和社区要求更新和优化了如下功能:退避时间设置 (Backoff timer)在 MQTT 协议中规定 Broker 要在 1.5 倍于客户端设置的 Keep

    2.6K20

    【python】python指南(十三):FastAPI鉴权Authorization方法

    一、引言 对于算法工程师来说,语言从来都不是关键,关键是快速学习以及解决问题的能力。...大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark,所以写了scala,后来用基于storm开发实时策略,用的java。...Authorization(鉴权)是商用API的必要模块,通过分配api-key等鉴权方式,为账号及服务计费,以及分配对应的权限。...同时,我们定义了请求和响应的模型,以确保数据的正确性和一致性 2.1.2 如何理解api_key: str = Depends(authenticate) 在 FastAPI 中,Depends 函数用于定义依赖项...如果请求头中没有 Authorization 字段,或者这个字段的值不符合预期,FastAPI 将抛出一个 HTTP 422 Unprocessable Entity 异常。

    1.9K10

    游戏服务器h2engine架构优化和跨平台设计

    关于RPC H2engine的rpc部分使用的是原来fflib的ffrpc组件,ffrpc设计的比较强大,但是因为h2engie的架构特点,ffrpc的一些功能用不到,很多网友都询问我关于rpc部分的设计问题...,我仔细思考后觉得确实可以把h2engine的rpc部分进行简化,这样对于使用者而言更容易理解。...Rpc模块进行了简化,其实rpc通信分三种,gate调用gameserver接口,gameserver调用gate接口,和gameserver与gameserver之间调用,发现没,所有架构内rpc都需要通过...这两个文件一个是gate端中转,一个是请求端封装,非常简洁。...关于跨平台 2engine一直是只支持linux下编译,Windows的移植一直没有时间弄,虽然行业内大部分服务器都是跑linux的,但是如果可以Windows下可以开发调试,那对于提高平常的开发效率来说将会大有裨益

    89530

    Python3网络爬虫实战-24、req

    基本实例 首先让我们来构建一个最简单的 GET 请求,请求的链接为:http://httpbin.org/get,它会判断如果如果是 GET 请求的话,会返回响应的 Request 信息。...那么 GET 请求,如果要附加额外的信息一般是怎样来添加?比如现在我想添加两个参数,名字 name 是 germey,年龄 age 是 22。...在接下来用到了最基础的正则表达式,来匹配出所有的问题内容,关于正则表达式会在后面的章节中详细介绍,在这里作为用到实例来配合讲解。 运行结果如下: ['\n如何评价杨超越对偶像意义的理解?...,来保证请求得到了正常响应,输出成功请求的消息,否则程序终止,在这里我们用 requests.codes.ok 得到的是成功的状态码 200。...结语 本节我们了解了利用 Requests 模拟最基本的 GET 和 POST 请求的过程,关于更多高级的用法,会在下一节进行讲解。

    1K10

    前端要知道的RESTful API架构风格

    自己在写Node服务时你遇到如何定义好接口的问题吗?下面介绍一种API架构风格,也是目前主流的API设计风格,你或许一直在使用。 ? RESTful API 示例 REST是什么?...是指在软件工程中这些模块、接口之间的透明程度。为什么说提升了可见性了呢?因为每次请求都必须包括所有信息,所以说接口之间就更加透明了。 缓存(Cache) 这个很好理解。...如果你的请求是错的,那么应用尽量把错误信息给返回,并按照一个规范通用的格式 安全 HTTPS 鉴权 限流 开发者友好 文档 超媒体 RESTful API 示例 下面是我是真实API截图,用Swagger...HEAD:获取资源的元数据。 OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。...410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

    1.2K30
    领券