【问题标题】:Can/Should Spring AOP be used with Microservices & Spring Boot?Spring AOP 可以/应该与微服务和 Spring Boot 一起使用吗?
【发布时间】:2017-01-27 12:03:15
【问题描述】:

我们正在为我的一个项目分析不同的概念。我们决定使用Spring Boot & Microservices 架构。

经过进一步讨论,我们提出了一个疑问,我们是否可以/应该使用Spring AOP来解决各种microservices的横切关注点?

如果不是,我们如何解决微服务的常见问题,如日志记录、事务管理等?

我已经广泛地用谷歌搜索了这个主题(甚至去了 5 页进行相同的搜索),但没有运气。任何帮助表示赞赏。

【问题讨论】:

  • 日志和事务管理在所有服务中都很常见,我认为它们会在大多数服务中。

标签: spring-boot spring-aop microservices


【解决方案1】:

使用 Spring 拦截器。他们有拦截器和工厂,几乎可以做任何事情。允许您将检测和通用代码添加到所有方面。

更新:示例拦截器和工厂。

ClientHttpRequestInterceptor
FilterRegistrationBean
SimpleClientHttpRequestFactory
ChannelInterceptor

【讨论】:

  • 如果我有三个spring boot项目作为微服务,有没有办法在这些独立项目中使用spring AOP解决共同关注的问题?
  • 不需要直接使用AOP。改用拦截器和工厂。例如,我们创建一个通用 jar,将工厂和拦截器注入到我们的项目中。不需要 AOP。
  • 假设您需要对所有传入的 HTTP 请求进行一些安全检查。然后,您可以使用 FilterRegistrationBean 添加一个 Servlet 过滤器来执行此安全检查。编写一个新的 JAR,其中包含您的 Servlet 过滤器实现并使用 FilterRegistrationBean 将过滤器添加到您的项目中。现在您的过滤器将在每个入站 HTTP 请求上调用
【解决方案2】:

我不认为使用 AOP 有什么可担心的。这就是 Spring 通常在幕后做事的方式。

我会小心记录方法调用,尤其是 AOP 的常见用途(滥用)的参数。

通常你写的代码越少越好。如果您可以使用标准的、经过验证的做事方式 - 使用它。

【讨论】:

  • 如果我有三个spring boot项目作为微服务,有没有办法在这些独立项目中使用spring AOP解决共同关注的问题?
  • Spring Boot 会自行处理大多数常见问题。或者,您将使用 Javamelody 之类的库。当然,您始终可以创建一个库并共享它。但是,您似乎过于关注技术而不是要解决的问题。 AOP 只是一个类似 StringUtils 的工具。关于您要解决的问题的第一件事。
猜你喜欢
  • 2021-11-02
  • 2018-07-16
  • 2020-06-06
  • 2015-09-03
  • 2019-02-21
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 2021-07-21
相关资源
最近更新 更多