小编Kei*_*ett的帖子

Spring Cloud Gateway 和 DiscoveryClient 路由

我正在尝试将正在使用的网关迁移spring-cloud-starter-netflix-zuul到 Spring Cloud Gateway,但我遇到了请求路由问题。

我浏览了以下有关为 DiscoveryClient 路由配置谓词和过滤器的文档:

为 DiscoveryClient 路由配置谓词和过滤器

这是我的 Netflix Zuul 配置中的一个片段:

zuul:
  routes:
    account-service: /accounts/**
Run Code Online (Sandbox Code Playgroud)

这是 Spring Cloud Gateway 配置中的一个片段,我试图在其中配置等效路由:

spring:
  cloud:
    gateway:
      routes:
        - id: account-service-route
          uri: lb://account-service
          predicates:
          - Path=/accounts/**
Run Code Online (Sandbox Code Playgroud)

我使用 Spring Cloud Eureka 作为我的发现服务器(在一个单独的微服务中),并且我目前没有配置DiscoveryClient 路由的谓词和过滤器中概述的任何配置

如果我向 发出请求/accounts/***,我会收到 404 响应。如果我将 Spring Cloud Gateway 配置更改为以下内容并向 发出相同的请求/account-service/***,则会收到 403 Forbidden 响应:

spring:
  cloud:
    gateway:
      routes:
        - id: account-service-route
          uri: lb://account-service
          predicates:
          - Path=/account-service/**
Run Code Online (Sandbox Code Playgroud)

我怀疑这与 Spring Cloud Gateway 在配置 DiscoveryClient 路由方面的默认行为有关,但我在日志中没有看到足够的信息来指出正确的方向。 …

spring-cloud-gateway

7
推荐指数
1
解决办法
3515
查看次数

如何使用Spring Cloud Stream MessageChannels配置@MessagingGateway?

我开发了异步Spring Cloud Stream服务,我正在尝试开发一种边缘服务,它使用@MessagingGateway来提供对异步服务的同步访问.

我目前正在获得以下堆栈跟踪:

Caused by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:355)
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:271)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:188)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
... 47 common frames omitted
Run Code Online (Sandbox Code Playgroud)

我的@MessagingGateway:

@EnableBinding(AccountChannels.class)
@MessagingGateway

public interface AccountService {
  @Gateway(requestChannel = AccountChannels.CREATE_ACCOUNT_REQUEST,replyChannel = AccountChannels.ACCOUNT_CREATED, replyTimeout = 60000, requestTimeout = 60000)
  Account createAccount(@Payload Account account, @Header("Authorization") String authorization);
}
Run Code Online (Sandbox Code Playgroud)

如果我通过@StreamListener在回复频道上使用该消息,它可以正常工作:

  @HystrixCommand(commandKey = "acounts-edge:accountCreated", fallbackMethod = "accountCreatedFallback", commandProperties = {@HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE")}, ignoreExceptions = {ClientException.class})
  @StreamListener(AccountChannels.ACCOUNT_CREATED)
  public void accountCreated(Account account, @Header(name …
Run Code Online (Sandbox Code Playgroud)

spring-integration spring-rabbitmq spring-cloud-stream spring-integration-amqp

5
推荐指数
1
解决办法
2400
查看次数

从 Hoxton.SR4 升级到 Spring Cloud Hoxton.SR7 后遇到错误

使用 Spring CloudHoxton.SR4和 Spring Boot2.2.9.RELEASE库,我的 Spring Boot 微服务可以正确启动,并且在本地环境中针对 localstack 运行时运行得很好,但是当我升级到 时Hoxton.SR7,我得到以下堆栈跟踪:

com.amazonaws.SdkClientException: Failed to connect to service endpoint: 
    at com.amazonaws.internal.EC2ResourceFetcher.doReadResource(EC2ResourceFetcher.java:100)
    at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.getToken(InstanceMetadataServiceResourceFetcher.java:91)
    at com.amazonaws.internal.InstanceMetadataServiceResourceFetcher.readResource(InstanceMetadataServiceResourceFetcher.java:69)
    at com.amazonaws.internal.EC2ResourceFetcher.readResource(EC2ResourceFetcher.java:66)
    at com.amazonaws.util.EC2MetadataUtils.getItems(EC2MetadataUtils.java:402)
    at com.amazonaws.util.EC2MetadataUtils.getData(EC2MetadataUtils.java:371)
    at org.springframework.cloud.aws.context.support.env.AwsCloudEnvironmentCheckUtils.isRunningOnCloudEnvironment(AwsCloudEnvironmentCheckUtils.java:38)
    at org.springframework.cloud.aws.context.annotation.OnAwsCloudEnvironmentCondition.matches(OnAwsCloudEnvironmentCondition.java:38)
    at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader$TrackedConditionEvaluator.shouldSkip(ConfigurationClassBeanDefinitionReader.java:469)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:131)
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:120)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:236)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
    at com.acme.Bootstrapper.main(Bootstrapper.java:33)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at …
Run Code Online (Sandbox Code Playgroud)

spring-cloud-aws

3
推荐指数
1
解决办法
1371
查看次数

我们应该如何使用 Spring Cloud AWS 3.0.2 设置 @SQSListener 删除策略?

我能够弄清楚如何设置它的唯一方法是在我的配置中使用以下覆盖:

@Bean("myFactory")
@ConditionalOnClass(SqsAsyncClient.class)
SqsMessageListenerContainerFactory<Object> mySqsListenerContainerFactory(
    SqsAsyncClient sqsAsyncClient) {
  return SqsMessageListenerContainerFactory.builder()
      .configure(
          options ->
              options.acknowledgementMode(
                  AcknowledgementMode.valueOf("ON_SUCCESS")))
      .sqsAsyncClient(sqsAsyncClient)
      .build();
}
Run Code Online (Sandbox Code Playgroud)

这在我的@SQSListener

@SqsListener(
      value = "myQueue",
      factory = "myFactory")
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚如何配置它,以便io.awspring.cloud.autoconfigure.sqs.SqsAutoConfiguration类可以设置确认模式,并且我可以获得让 Spring 自动配置我需要的一切的好处。谁能告诉我应该如何继续发展?

在 Spring Cloud AWS 3.x 之前,我们设置如下@SQSListener,似乎不再支持:

@SqsListener(
      value = "myQueue",
      deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)

Run Code Online (Sandbox Code Playgroud)

spring-cloud-aws

3
推荐指数
1
解决办法
1255
查看次数