2

シンプルな春のクラウド領事アプリをセットアップしようとしています。

「ディストリビューション」サービスを作成し、consul に登録しました (spring.application.name プロパティを「ディストリビューション」に設定)。

私は、偽装を使用して「配布」サービスを呼び出そうとしている「取得」サービスを持っています。

これが私のメインクラスです

@Configuration
@EnableAutoConfiguration
@EnableDiscoveryClient
@RestController
@EnableFeignClients
@EnableHystrix
public class Acquisition {


    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    private DistributionClient distributionClient;


    @RequestMapping("/use-feign")
    public String sendData() {
        distributionClient.sendData(new Data("Hello World"));
        return "sent";
    }

    @RequestMapping("/disco")
    public String disco() {
         List<ServiceInstance> list = discoveryClient.getInstances("distribution");
        if (list != null && list.size() > 0) {
            return list.get(0).getUri().toString();
        }
        return null;
    }

    public static void main(String[] args) {
        SpringApplication.run(Acquisition.class, args);
    }

}

これが私の偽のクライアントです

@FeignClient(value = "distribution")
interface DistributionClient {

    @RequestMapping(method = RequestMethod.POST, value = "/data", consumes = "application/json")
    void sendData(Data data);
}

ここに私のpom.xmlがあります

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-all</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-consul-dependencies</artifactId>
            <version>1.0.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

「/disco」URL をリクエストすると、「distribution」サービスの URL が適切に取得されます。これは、ディスカバリー全体が期待どおりに機能していることを意味します。

しかし、「/use-feign」URL をリクエストすると、次の例外が発生します。

com.netflix.client.ClientException: ロード バランサーには、クライアントに使用できるサーバーがありません: com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:468) で配布 ~[ribbon-loadbalancer-2.2.0.jar:2.2. 0] com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) で ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] com.netflix.loadbalancer.reactive.LoadBalancerCommand$1 で。 call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.2.0.jar:2.2.0] at rx.Observable.unsafeSubscribe(Observable.java:8460) ~[rxjava-1.1.5.jar:1.1.5 ] rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) で ~[rxjava-1.1.5.jar:1.1.5] rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) で ~ [rxjava-1.1.5.jar:1.1.5]

構成が不足していますか?

ご協力ありがとうございました。

4

2 に答える 2