标签: netflix-eureka

FeignClient 带有客户端证书和 Docker

我的微服务需要使用双向 ssl。每个微服务都是一个 Spring Boot 应用程序,注释为:

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@EnableZuulProxy
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

每个 yml 对 eureka/ribbon 都有类似的配置:

eureka:
    client:
        service-url:
          defaultZone: ${EUREKA_CLIENT_SERVICEURL_PROTOCOL:http}://${EUREKA_CLIENT_SERVICEURL_HOST:192.168.99.100}:${EUREKA_CLIENT_SERVICEURL_PORT:8761}/eureka/
    instance:
        secure-virtual-host-name: ${spring.application.name}
        prefer-ip-address: true
        non-secure-port-enabled: ${EUREKA_NON_SECURE_PORT_ENABLED:false}
        secure-port-enabled: ${EUREKA_SECURE_PORT_ENABLED:true}
        secure-port: ${server.port}
ribbon:
    IsSecure: true
    eureka:
        enabled: true
Run Code Online (Sandbox Code Playgroud)

每个微服务都有一个控制器,该控制器公开用于各种功能的 REST API。

当一个微服务需要调用另一个微服务端点时,我尝试通过创建该微服务的客户端接口来实现:

@FeignClient(name = "user", configuration = FeignConfiguration.class, url = "https://user")
public interface UserClient {
    @RequestMapping(method = RequestMethod.GET, value = "/test")
    String testUser();
}
Run Code Online (Sandbox Code Playgroud)

这是 Feign 配置:

@Configuration …
Run Code Online (Sandbox Code Playgroud)

spring docker spring-cloud netflix-eureka netflix-ribbon

2
推荐指数
1
解决办法
1万
查看次数

Eureka检测服务状态

语境

\n\n

我们使用 Spring Cloud Netflix 和 Eureka 作为服务发现,使用 Zuul 来代理服务并对其进行负载平衡。

\n\n

微服务是使用 NodeJS 实现的,并使用 NPM 模块eureka-js-client和中间的自定义层在 Eureka 注册,该自定义层处理所有微服务通用的配置和内容。

\n\n
\n\n

问题

\n\n

问题是尤里卡无法识别一项服务是否出现故障。这是一个问题,因为我们拥有一个具有自动部署功能的开发基础架构,每次都会在不同端口上重新部署和重新启动微服务,而无需重新启动 Eureka(和 Zuul)。

\n\n

因此,过了一段时间,我们就有了十个或更多的一个微服务实例,其中只有一个处于运行状态,但所有实例都被识别为 being UP

\n\n
\n\n

解决方法

\n\n
    \n
  1. 我尝试在客户端上设置heartbeatInterval较小的值,但这没有帮助。

  2. \n
  3. 我尝试在服务器上设置renewalThresholdUpdateIntervalMs较小的值,但这也没有帮助。

  4. \n
  5. 更多令人沮丧、无益的属性尝试\xe2\x80\xa6

  6. \n
\n\n
\n\n

问题

\n\n

如何配置 Eureka 驱逐实例或将DOWN在合理时间(不是 30 分钟左右)内未发送心跳的实例设置为状态?

\n\n
\n\n

代码片段

\n\n

服务器本身不包含可提及的代码(只是使用 Spring Cloud Starter 启动 Eureka 服务器的一些注释)。

\n\n

Eureka服务器的配置(我已经删除了所有不工作的尝试):

\n\n
server:\n  port: 8761\n\nspring:\n  cloud:\n    client:\n      hostname: localhost\n\neureka:\n  instance:\n …
Run Code Online (Sandbox Code Playgroud)

java spring node.js spring-cloud netflix-eureka

2
推荐指数
1
解决办法
8093
查看次数

Spring Cloud 和 Eureka:java.lang.IllegalStateException:没有可用于 ACCOUNTS-SERVICE 的实例

我一直在尝试使用 Spring Cloud 和 Eureka 创建微服务。

现在我有一个服务器可以接收 2 个微服务:ACCOUNTS-SERVICE 和 WEB-SERVICE

[nio-1111-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance ACCOUNTS-SERVICE/192.168.0.13:accounts-service:2222 with status UP (replication=false)
[nio-1111-exec-4] c.n.e.registry.AbstractInstanceRegistry  : Registered instance WEB-SERVICE/192.168.0.13:web-service:3333 with status UP (replication=false)
Run Code Online (Sandbox Code Playgroud)

这是我的网络服务:

package eu.epitech.jug.services.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

/**
 * Created by sadzeih on 12/9/16.
 */
@SpringBootApplication
@EnableDiscoveryClient
@ComponentScan(useDefaultFilters=false)
public class WebServer {
    public static void main(String[] args) {
        // Will configure using web-server.yml
        System.setProperty("spring.config.name", "web-server");
        SpringApplication.run(WebServer.class, args); …
Run Code Online (Sandbox Code Playgroud)

spring spring-cloud netflix-eureka

2
推荐指数
2
解决办法
9136
查看次数

如何降低 zuul-proxy 延迟?

我有一个eureka-servereureka-client-1eureka-client-2zuul-proxy部署。

eureka-client-*被更改{status:"UP"}{status:"DOWN"}

我如何能降低延迟,这样zuul-proxy总是指向的一个eureka-client-*{status:"UP"}

spring netflix-eureka netflix-zuul

2
推荐指数
1
解决办法
1745
查看次数

SSLPeerUnverifiedException - <> 的证书与证书主题的通用名称不匹配

当我们尝试从 zuul 访问安全的 https REST 点时,出现以下异常。

2017-10-27 08:26:08.499 调试 15708 --- [http-nio-9092-exec-1] oahcssl.SSLConnectionSocketFactory:安全会话建立
2017-10-27 08:26:08.500 调试 15708 --- [http-nio-9092-exec-1] oahcssl.SSLConnectionSocketFactory:协商协议:TLSv1.2
2017-10-27 08:26:08.500 调试 15708 --- [http-nio-9092-exec-1] oahcssl.SSLConnectionSocketFactory:协商密码套件:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
2017-10-27 08:26:08.501 调试 15708 --- [http-nio-9092-exec-1] oahcssl.SSLConnectionSocketFactory:对等主体:CN=10.xxx.xx.xx,OU=xxx,O=xxx , L=xxx, ST=xx, C=xx
2017-10-27 08:26:08.502 DEBUG 15708 --- [http-nio-9092-exec-1] oahcssl.SSLConnectionSocketFactory:发行人主体:CN=10.xxx.xx.xx,OU=xxx,O=xxx , L=xxx, ST=xx, C=xx
2017-10-27 08:26:08.516 DEBUG 15708 --- [http-nio-9092-exec-1] oahconn.ssl.DefaultHostnameVerifier:证书与证书主题的通用名称不匹配:10.xxx.xx .xx
javax.net.ssl.SSLPeerUnverifiedException:证书与证书主题的通用名称不匹配
    在 org.apache.http.conn.ssl.DefaultHostnameVerifier.matchCN(DefaultHostnameVerifier.java:186)
    在 org.apache.http.conn.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:133)
    在 org.apache.http.conn.ssl.DefaultHostnameVerifier.verify(DefaultHostnameVerifier.java:99)
    在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.verifyHostname(SSLConnectionSocketFactory.java:463)
    在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:397)
    在 org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
    在 org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
    在 org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
    在 org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
    在 org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
    在 org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) …

rest ssl-certificate netflix-eureka netflix-zuul netflix-ribbon

2
推荐指数
1
解决办法
1万
查看次数

与 Eureka 客户之间的沟通

我有两个客户端注册到同一个 Eureka 服务器,当我检查服务器 UI 时,我看到两个客户端都注册得很好。但是当我尝试从另一个客户端调用一个客户端时,我收到 IO 异常:ResponseEntity<LoginInformationDto> quoteResponse = restTemplate.exchange("http://lirs-security/api/userSecurity/validateUserToken/" + token, HttpMethod.GET, null, new ParameterizedTypeReference<LoginInformationDto>() { }); /** ResponseEntity<LoginInformationDto> quoteResponse = restTemplate.exchange("http://localhost:8103/api/userSecurity/validateUserToken/" + token, HttpMethod.GET, null, new ParameterizedTypeReference<LoginInformationDto>() { }); */. 当我直接访问其他服务时,它可以工作。错误:org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://lirs-security/cbf69488-5624-4181-9254-ff423afa7620": lirs-security; nested exception is java.net.UnknownHostException: lirs-security 这是我的控制台的样子:在此处输入图片说明 我已经为此奋斗了好几天,但我已经没有想法了。我真的需要我能得到的所有帮助@这一点。

`#Server application.yml file
spring:
application:
name: lirs-gateway

server:
port: 8101
eureka:
instance:
hostname: localhost 
client:
registerWithEureka: false
fetchRegistry: false
#server:
#waitTimeInMsWhenSyncEmpty: 0
serverUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

#security client yml file …
Run Code Online (Sandbox Code Playgroud)

client spring-boot netflix-eureka

2
推荐指数
1
解决办法
1423
查看次数

在尤里卡注册我的配置服务器有什么用吗?

我在所有配置服务器客户端spring.cloud.config.uribootstrap.properties文件中指定了配置服务器 URI 。

那么@EnableDiscoveryClient给它加注解,在Eureka注册配置服务有什么用呢?

java spring-boot netflix-eureka spring-cloud-netflix spring-cloud-config

2
推荐指数
1
解决办法
1388
查看次数

Docker:客户端未连接到 Eureka 服务器

我想为我的客户端创建一个容器,为我的服务器创建一个容器并连接它们。

客户:

server.port=8084
spring.application.name=articlemicroservice

#already tried localhost & hostIp 
eureka.client.serviceUrl.defaultZone=http://discovery:8761/eureka

eureka.client.fetchRegristry=true
eureka.instance.preferIpAddress=true

spring.h2.console.enabled=true
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:shop
Run Code Online (Sandbox Code Playgroud)

服务器:

server.port=8761
spring.application.name=eureka-server

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
eureka.instance.lease-expiration-duration-in-seconds: 2  
Run Code Online (Sandbox Code Playgroud)

我使用 docker-maven-plugin 创建了两个容器。dockerfile 看起来像这样:

FROM java
ADD /articlemicroservice.jar //
ENTRYPOINT ["java", "-jar", "/articlemicroservice.jar"]
Run Code Online (Sandbox Code Playgroud)

启动我使用的容器

docker run -it -p 8761:8761 eurekaserver
docker run -it -p 8084:8084 articlemicroservice
Run Code Online (Sandbox Code Playgroud)

当我启动 Cient 时,我只是得到:“com.netflix.discovery.shared.transport.TransportException:无法在任何已知服务器上执行请求”并且

 "2019-03-15 17:54:51.439  WARN 1 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator     : There was a problem with the instance info replicator"
Run Code Online (Sandbox Code Playgroud)

我是否忘记了属性中的某些内容?

编辑:这是 docker-maven-plugin 的配置:

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <configuration> …
Run Code Online (Sandbox Code Playgroud)

java spring maven docker netflix-eureka

2
推荐指数
1
解决办法
4224
查看次数

Eureka 的 Springboot 错误,浏览器显示 xml 而不是 json

我使用 Java8 和 SpringBoot 使用 Maven 创建了一个微服务。让我们称之为 MicroServiceA

它具有返回 ResponseEntity 对象的控制器,如下所示:

    @RestController
    @RequestMapping("/api")
    public class MicroserviceAController {  


        @GetMapping(value = "/all")
        public ResponseEntity<ServiceAResponseWrapper<List<ServiceADto>>> getAll() {

ServiceAResponseWrapper<List<ServiceADto>> wrapper = 
    new ServiceAResponseWrapper<List<ServiceADto>>(ServiceAResponseStatus.SUCCESS,findAll());

return new ResponseEntity<ServiceAResponseWrapper<List<ServiceADto>>>(wrapper,HttpStatus.OK);

        }

      public static List<ServiceADto> findAll() {
        //returns list of ServiceADto objects
    }

    }
Run Code Online (Sandbox Code Playgroud)

当我启动此服务并在任何浏览器中验证它时:http://localhost:8073/api/all/,我得到显示的 JSON 响应。

现在,如果我想将我的服务引入 EUREKA 服务注册中心,那么我需要进行以下更改。

  1. 创建 EUREKA 服务器微服务。我启动它 - http://localhost:8761/
  2. 对 MicroserviceA 进行如下更改 -

转到 pom.xml 并添加依赖项

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

转到 application.yml 并添加以下内容:

eureka:
  client:
    registerWithEureka: true …
Run Code Online (Sandbox Code Playgroud)

java xml json spring-boot netflix-eureka

2
推荐指数
1
解决办法
1154
查看次数

如何使用服务发现配置kong api网关?

我正在研究微服务架构。我想在前端实现一个 kong API 网关。我不想进入 kong admin API 并手动添加所有公开的 API。我可以借助任何服务发现实现(例如 eureka)来将我的 API 自动配置为 Kong 吗?

service-discovery spring-boot netflix-eureka kong

2
推荐指数
1
解决办法
6492
查看次数