当前位置: 首页 > 知识库问答 >
问题:

Spring Cloud-在Zuul中使用@LoadBalaneced RestTemplate

高鸿振
2023-03-14

我的项目中有一个常见的Spring云架构:用于服务发现的eureka、作为反向代理的zuul和一些微服务。我希望能够通过编程从zuul访问微服务。由于zuul由Ribbon支持,我只想自动连接一个@LoadBalancedRestTemplate,但显然这不起作用。下面是我的小测试设置。

Zulgateway应用程序。爪哇:

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulGatewayApplication {

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

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

有些ervice.java:

@RequiredArgsConstructor
@Service
@Slf4j
public class SomeService {
    private final RestTemplate restTemplate;

    @PostConstruct
    public void init() {
        ResponseEntity<Void> response = restTemplate.getForEntity("http://my-service/notify", Void.class);
    }
}

下面是stackTrack的相关部分:

Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://my-service/notify": my-service; nested exception is java.net.UnknownHostException: my-service
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:748) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:674) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:342) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at xxx.xxx.xxxx.zuulgateway.service.SomeService.init(SomeService.java:40) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157) ~[spring-beans-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    ... 38 common frames omitted
Caused by: java.net.UnknownHostException: my-service
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:591) ~[na:na]
    at java.base/java.net.Socket.connect(Socket.java:540) ~[na:na]
    at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:341) ~[na:na]
    at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:362) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1242) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1181) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1075) ~[na:na]
    at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1009) ~[na:na]
    at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:76) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:739) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]

我是否需要配置其他东西来获得正确的RestTemboard?我还尝试用@RibbonClient注释Main Class,但是错误消息保持不变。

共有1个答案

常经赋
2023-03-14

它在后期构造中不起作用。您需要侦听类似于ApplicationReadyEvent的事件。

public class SomeService
        implements ApplicationListener<ApplicationReadyEvent> {
    private final RestTemplate restTemplate;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        ResponseEntity<Void> response = restTemplate.getForEntity("http://my-service/notify", Void.class);
    }
}
 类似资料:
  • 本文向大家介绍SpringCloud Zuul服务功能与使用方法解析,包括了SpringCloud Zuul服务功能与使用方法解析的使用技巧和注意事项,需要的朋友参考一下 Zuul是什么?   Zuul包含了对请求的路由和过滤两个最主要的功能:     其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚

  • 本文向大家介绍浅谈SpringCloud之zuul源码解析,包括了浅谈SpringCloud之zuul源码解析的使用技巧和注意事项,需要的朋友参考一下 zuul各版本实现存在一些微小的变化,总的实现思想未改变,以spring-cloud-netflix-core-1.3.6.RELEASE为例 一、zuul的重要的初始化类 org.springframework.cloud.netflix.zuu

  • 本文向大家介绍SpringCloud网关组件zuul实例解析,包括了SpringCloud网关组件zuul实例解析的使用技巧和注意事项,需要的朋友参考一下 1.引入如下依赖 2.启动类添加如下注解 @EnableZuulProxy 原先访问商品服务如下: 通过网关访问:将访问地址改为网关地址,并添加商品服务的服务名称如下: 即完成统一完成由网关进行发送 同时可以在启动类中添加自定义路由映射 这样就

  • 本文向大家介绍springcloud 中 zuul 修改请求参数信息的方法,包括了springcloud 中 zuul 修改请求参数信息的方法的使用技巧和注意事项,需要的朋友参考一下 Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器.   Zuul功能: 认证 压力测试 金丝雀测试 动态路由 负载削减 安全 静态响应处理 主动/主动交换管理 Zuul的规则引擎允许通过任何JVM

  • 本文向大家介绍详解SpringCloud Zuul过滤器返回值拦截,包括了详解SpringCloud Zuul过滤器返回值拦截的使用技巧和注意事项,需要的朋友参考一下 Zuul作为网关服务,是其他各服务对外中转站,通过Zuul进行请求转发。这就涉及到部分数据是不能原封返回的,比如服务之间通信的凭证,用户的加密信息等等。 举个例子,用户服务提供一个登录接口,用户名密码正确后返回一个Token,此To

  • 我有zuul网关服务器,没有eureka服务发现。 我使用下面显示的yml文件连接微服务和zuul。 当我执行URL超时时,会发生异常