Tag: microservices

不允许直接调用微服务。 仅允许通过API网关

也许这是一个奇怪的问题(我是微服务的新手)。 但我正在寻找有关如何继续这一点的一些信息。 不需要特定于Spring,但这是我目前正在使用的框架。 示例:假设我们有两个微服务 a) http://myurlfortesting.com:8085/api/rest/serviceone b) http://myurlfortesting.com:8090/api/rest/servicetwo 我们设置了Spring Zuul(充当API网关),其中包含以下转发来电的规则: / rest / one – > http://myurlfortesting.com:8085/api/rest/serviceone / rest / two – > http://myurlfortesting.com:8090/api/rest/servicetwo 问题是:有没有办法阻止用户直接访问A和B中提到的服务(只允许通过API网关提供的服务)? 可以通过设置一些额外的filter或者我们在微服务端点中设置它来使用Springs Zuul(充当API网关)吗? 甚至想知道是否有办法甚至不处理不通过API网关的微服务端点上的直接调用。 也许这是通过服务器特定规则解决的,与Spring无关? 非常感谢, / d

Netflix Feign – 通过微服务传播状态和exception

我正在使用Netflix Feign将微服务A的一个操作调用到微服务B的其他操作,该操作使用Spring Bootvalidation代码。 如果validation不好,微服务B的操作会抛出exception。 然后我在微服务中处理并返回一个HttpStatus.UNPROCESSABLE_ENTITY (422),如下所示: @ExceptionHandler({ ValidateException.class }) @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) @ResponseBody public Object validationException(final HttpServletRequest request, final validateException exception) { log.error(exception.getMessage(), exception); error.setErrorMessage(exception.getMessage()); error.setErrorCode(exception.getCode().toString()); return error; } 因此,当微服务A在接口中调用B作为下一个: @Headers(“Content-Type: ” + MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestLine(“GET /other”) void otherOperation(@Param(“other”) String other ); @Headers(“Content-Type: ” + MediaType.APPLICATION_JSON_UTF8_VALUE) @RequestLine(“GET /code/validate”) Boolean validate(@Param(“prefix”) String prefix); static PromotionClient connect() { return Feign.builder() […]

如何在两个微服务之间的REST服务之间共享实体?

我用java创建了两个微服务。 我需要从服务A到服务B进行REST api调用。发送的数据将采用JSON格式。 使用jax-rs我需要在服务中创建实体类。 由于两个实体类在两个项目中都相同。 我 创建一个公共jar并使用is for我的所有实体/域对象? 这是否使我的微服务更紧密耦合? 我是否在微服务项目中创建了相同的类? 这只意味着重复两个项目的工作? 是否有更好的方式在服务之间进行通信?

当kafka参与微服务架构时,如何实施合同测试?

我目前正在开发一个项目,我们在微服务架构中实现了kafka。 如果您使用pact-jvm成功创建mS到kafka主题交互的合同测试用例吗? 我的实现是microservice1向REST客户端发布消息,然后REST客户端将消息发布到Kafka主题。 microservice2使用GET方法从Kafka主题中检索消息。

反应式编程优点/缺点

我一直在研究并尝试使用Reactor和RxJava进行编码的Reactive Style。 我确实理解,与单线程执行相比,反应式编码可以更好地利用CPU。 在基于Web的应用程序中,反应式编程与命令式编程之间是否有任何具体比较? 通过对非反应式编程使用反应式编程,我实现了多少性能提升和吞吐量? 还原反应编程有哪些优点和缺点? 有没有统计基准?

微服务,服务注册,API网关和数据共享

我实际上正在阅读关于微服务架构的文章,但似乎他们正在以最简单的方式处理事情,而不是更深入地解释。 为了向您解释我的问题,我将向您展示我的实际小建筑: 所以,这就是我想要使用的。 在技​​术上做任何事之前,我需要更多的理论信息。 我的域名的描述 我有一些基于移动和浏览器的客户,能够在应用程序上连接自己,获取用户信息并能够查询有关他们购买的内容的账单信息。 在单片应用程序中,我将使用这种架构: – 具有Mobile / Angular-Ember的表示层 – 带有NGINX的REST API的业务层 – 带有标准MySQL数据库的DAL – 可扩展性仅适用于X轴 在这种情况下,我想使用微服务架构,因为它是“域可扩展的”并且非常灵活(当然要学习更多关于它的内容)。 在架构上,在每个服务中,都有相关API公开的唯一HTTP URL。 问题 a /在(1)flux中,“mobile”在http://myDomain.or/auth上发送http请求。 在我看来,APIGateway能够要求标准的服务注册表(Eureka,ZooKeeper或其他东西)能够找到AuthSrv是否可访问并且可以检索他的网络地址。 然后ApiGateway可以请求AuthSrv并响应服务器 这是一个让它运作的好方法吗? 处理X机器访问数据时是否存在延迟问题? b / flux(2)咨询服务注册表。 服务注册表如何理解/ auth上的每个请求,甚至在/ auth / other之类的子URL上(如果它被公开)都与此地址ip:port上的此服务相关? c / flux(3)显示服务注册表具有可用的AuthSrv。 (3之二)显示另一个:没有AuthSrv可用。 在一个小应用程序中,我们可以承认我们失去了一段时间的失望,但在一个大型系统中,有数百个服务链接在一起,我们如何处理服务的不足? d /在另一篇文章中,我询问如何存储结算信息,因为它与用户,其他服务和另一个数据库相关。 在标准架构中,我会: { billingInformations:{…}, billingUser:ObjectId(“userId”) } 在微服务架构中,有人建议使用: { billingInformations:{…}, billingUser:”/user/12365″ // URL corresponding […]

没有Spring-boot的Eureka服务发现

我写了一个spring boot微服务和一个REST客户端。 客户端是另一个模块的一部分,并对微服务进行RESTful调用。 微服务向Eureka注册表注册,我希望我的客户端(这不是一个Spring启动项目)使用Eureka查询和获取服务端点。 我的问题是因为客户端不是Spring-Boot应用程序我不能使用@SpringBootApplication , @EnableDiscoveryClient等注释,并且DiscoveryClient不会自动连接到应用程序。 无论如何都要在不使用注释的情况下手动将DiscoveryClient bean自动连接到客户端?