【问题标题】:Using messaging to do writes as well as reads使用消息传递进行写入和读取
【发布时间】:2010-12-02 04:19:51
【问题描述】:

我来自网络背景,我只需要处理 HTTP,所以请原谅我的无知。

我有一个应用程序,客户端可以在其中侦听使用 stomp 的消息队列中的更改。以前,客户端只需要收听相关频道的消息,告诉他们有关服务器上的更改并相应地更新自己。简单的东西。

现在要求客户端能够编辑数据并将这些更改推送回服务器。服务器上的数据已经通过 RESTful 资源暴露出来,所以我的第一个想法就是发出 REST put 请求来更改服务器上的数据,但后来我开始怀疑是否可以使用消息传递找到解决方案。我可以打开另一个通道,客户端可以将更改发布到该通道,服务器可以订阅该通道并相应地更新自身。实现这一点显然很简单,但我希望提前向我指出一些潜在的陷阱。

我对 REST 很熟悉,所以想问一些关于 REST 的问题:

  • 我是否要将一组队列映射到每个资源(即 itemPostQueue、itemPutQueue、itemDeleteQueue)的 REST/CRUD 动词?
  • GET 怎么样,我如何请求数据以使用队列读取?
  • 我应该使用什么来替换我的状态码机制来捕获问题,还是我只是触发并忘记 (gulp) 或以某种方式在 Stomp 中使用错误/收据标头?

任何答案和建议将不胜感激。

问候,

克里斯

【问题讨论】:

  • 刚刚发现这本书可能是一个很好的起点:amazon.co.uk/…
  • 如果你需要一个消息队列,这听起来确实不太好。是否有理由不简单地执行 REST 请求并且在两者之间没有额外的复杂性?
  • 最令人头疼的是客户端是基于 flex 的,而 flex 不支持 GET 和 POST 以外的 http 方法,这意味着我将不得不在客户端和宁静的资源。第二个原因就是为了好玩而尝试不同的东西!

标签: message-queue messaging stomp


【解决方案1】:

虽然我不清楚为什么您必须在此处使用消息传递,但有几点想法:

您可以像 itemPostQueue 那样在线路上映射到 REST,但这对于面向消息的人来说可能会觉得不自然。如果您正在使用某种具有保证语义和内置交付的队列,那么请继续使用该机制。对于购物车示例,您可以将 AddItem 消息放在网络上,并且您相信基础架构可以将其一次性传送到服务器。

消息队列中没有直接的 GET 类概念。你可以用一对消息来模拟它,我给你一个请求,你给我一个回复。这很像 RPC,但更进一步解耦。因此,我向您发送了一个 PublishCart 请求,然后服务器在客户端正在侦听的频道上发送 CartContents 消息。

状态码比较复杂,一般分为两个阵营。首先是实际的队列库消息 - 像处理任何普通系统消息一样处理它们。其次,您可能希望将自己的消息放在线路上,以指示链中某个位置出现故障。

消息传递确实可以使您的应用显着分离。与 HTTP 不同,您知道某事发生了,通过队列,您可以向某人发送一封信。它可能会到达那里。邮递员可能会把它丢在雪地里。狗可能会吃掉它。如果你在一段时间内没有得到回应,你尝试其他方式联系你的亲戚,或者拉回类比,联系服务器。监控队列基础设施的健康状况和队列深度等变得更加重要,因为它们是您现在所依赖的管道。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2014-11-27
    • 2019-08-22
    相关资源
    最近更新 更多