java - 在微服务中,端点重载与分离端点

标签 java jax-rs microservices publish-subscribe endpoint

这个问题类似于method overloading vs optional parameter 但 1) 它与服务端点相关,以及 2) 可选参数可能表示不同的语义:

假设我在我的服务中提供了一个端点,比如说“/messaging/subscribe”,它基本上允许客户端订阅一些主题。因此,订阅请求对象可能包含主题名称列表和足以让服务在向订阅主题之一发布消息时向订阅客户端发送通知的信息。

同样重要的是要注意,该服务与这些消息的内容无关,并且在发布者和订阅者之间单独进行通信。该服务只需要将已发布消息的一些编码传递给所有订阅者,他们知道如何对其进行解码。
还假设希望通过此端点订阅的客户端需要 SUBSCRIBER 角色。

现在假设我希望服务提供一个新的主题监控功能:这个新功能的客户端仍然需要指定一个主题名称列表和通知它的方式,但是这种服务:
1) 将发送有关感兴趣主题的元数据通知。这些通知将传达有关主题的元数据信息,例如:“订阅者 x 已与主题 y 断开连接”,或“订阅者 v 订阅了主题 q”,或“主题 z 上的订阅者数量刚刚下降到 3 以下”,或“过去一小时内向主题 w 发送的通知少于 5 条”
2) 此服务的客户端需要 MONITOR 角色。
3) 请注意,这些通知中的消息将是系统定义的消息。因此,他们的订阅者可以接收表示消息数据(例如事件类型、订阅者 ID、主题名称等)的服务定义对象。

有两种处理方法:
可以为监控服务创建一个新端点,例如“/messaging/monitor”,具有与现有订阅端点相同的请求对象信息,可能还有其他参数。

或者,现有端点可能会过载以处理订阅和监视请求,其中差异在附加参数中传达。例如,客户端可以在请求对象中指定一个名为“monitor”的 boolean 属性。因此,如果请求不包含此“可选”请求属性或其值为 false,则该请求是对主题的正常订阅。或者,如果参数指定 monitor==true,则意味着客户端只对与指定主题相关的元数据事件感兴趣。 代码可以根据此“monitor”请求属性的值来检查角色授权。

为了决定两种选择中哪一种更可取,应该考虑哪些因素?

这不重要,但实现使用 Java 中的 Vertx...

最佳答案

我认为核心问题是它是否仍然是相同的操作(具有不同的参数)。这从操作的语义上应该很清楚。
从我在你的问题中读到的内容来看,订阅似乎与订阅 + 监控有很大不同。

添加 monitor 参数不仅实质上修改了发生的事情,而且还更改了返回类型等。

所以我的投票转到了一个新的端点。

关于java - 在微服务中,端点重载与分离端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49476498/

相关文章:

javascript - 如何从服务器数据创建 "add to calendar"iCal 链接(.ics 文件)并将其发送回我的 webApp?

java - 带拦截器的 JAX-RS/Wildfly/Java SDK13 方法调用失败

java - 升级到 java 8 后无法使用 crashlytics 发布项目

java - 随机数生成算法

java - 构造对象并将其放入 ArrayList 时遇到问题

java - 将多个 @QueryParam 映射到一个自定义实体

java - 具有 Maven 和 SQL Server 类未找到异常的微服务

java - 如何模拟真实世界的压力测试场景

architecture - SOA 与 NuGet 包

java - JAXB 中的对象