我正在spring和kubernetes上做一个微服务架构。现在我正在做网关微服务。在微服务启动期间,我在运行时出现以下错误:
块引用
2020-01-15 11:00:57.312 ERROR 1 --- [ elastic-4] reactor.core.scheduler.Schedulers : Scheduler worker in group main failed with an uncaught exception
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IllegalStateException
Caused by: java.lang.IllegalStateException: null
at java.util.Optional.orElseThrow(Optional.java:290) ~[na:1.8.0_212]
at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.findEndpointPort(KubernetesDiscoveryClient.java:218) ~[spring-cloud-kubernetes-discovery-1.1.1.RELEASE.jar!/:1.1.1.RELEASE]
at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getNamespaceServiceInstances(KubernetesDiscoveryClient.java:161) ~[spring-cloud-kubernetes-discovery-1.1.1.RELEASE.jar!/:1.1.1.RELEASE]
at org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient.getInstances(KubernetesDiscoveryClient.java:118) ~[spring-cloud-kubernetes-discovery-1.1.1.RELEASE.jar!/:1.1.1.RELEASE]
at org.springframework.cloud.kubernetes.discovery.reactive.KubernetesReactiveDiscoveryClient.lambda$getInstances$0(KubernetesReactiveDiscoveryClient.java:58) ~[spring-cloud-kubernetes-discovery-1.1.1.RELEASE.jar!/:1.1.1.RELEASE]
at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:46) ~[reactor-core-3.3.2.RELEASE.jar!/:3.3.2.RELEASE]
at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) ~[reactor-core-3.3.2.RELEASE.jar!/:3.3.2.RELEASE]
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) ~[reactor-core-3.3.2.RELEASE.jar!/:3.3.2.RELEASE]
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) ~[reactor-core-3.3.2.RELEASE.jar!/:3.3.2.RELEASE]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_212]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[na:1.8.0_212]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[na:1.8.0_212]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_212]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_212]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_212]
2020-01-15 11:00:57.481 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 9080
2020-01-15 11:00:57.485 INFO 1 --- [ main] i.m.gateway.GatewayApplication : Started GatewayApplication in 7.941 seconds (JVM running for 8.67)
块引用
随着通过添加 spring-cloud-starter-kubernetes 依赖项转向 kubernetes 服务发现,问题出现了。通过使用其他服务发现(如 eureka 或 consul),网关可以正常工作。下面是绒球:
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>it.milionaires</groupId>
<artifactId>gateway</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gateway</name>
<description>Gateway service</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!--Dipendenza per gateway spring-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.3.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-hystrix</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>tag-latest</id>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<repository>gateway</repository>
<tag>latest</tag>
</configuration>
</execution>
<execution>
<id>tag-version</id>
<goals>
<goal>build</goal>
<goal>tag</goal>
<goal>push</goal>
</goals>
<configuration>
<repository>gateway</repository>
<tag>${project.version}</tag>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
有没有人遇到过这个问题或知道如何解决它?提前感谢这是我的部署。yml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway-deployment
labels:
app: gateway
spec:
replicas: 1
selector:
matchLabels:
app: gateway
template:
metadata:
labels:
app: gateway
spec:
containers:
- name: gateway
image: liviucornel/gateway
ports:
- containerPort: 9080
---
apiVersion: v1
kind: Service
metadata:
name: gateway
spec:
selector:
app: gateway
ports:
- port: 9080
targetPort: 9080
# nodePort: 30010
type: ClusterIP
这是属性文件:
server:
port: 9080
spring:
application:
name: gateway
profiles:
active: zone2
cloud:
loadbalancer:
ribbon:
enabled: false
config:
uri: http://configuration-server
failFast: false
discovery:
service-id: configuration-server
enabled: true
retry:
maxAttempts: 20
enabled: true
request-connect-timeout: 500
request-read-timeout: 500
kubernetes:
discovery:
service-name: gateway
primary-port-name: 9080
enabled: true
all-namespaces: true
gateway:
routes:
- id : servizio1
uri : lb://servizio1
predicates :
- Path=/servizio1/**
filters :
- RewritePath=/servizio1/servizio1/(?<path>.*), /$\{path}
# - name : ServiceGatewayPreFilter
# - name : ServiceGatewayPostFilter
- id: servizio2
uri: lb://servizio2
predicates:
- Path=/servizio2/**
filters:
- RewritePath=/servizio2/servizio2/(?<path>.*), /$\{path}
default-filters:
- name : ServiceGatewayGlobalFilter
discovery:
locator:
enabled: true
这是码头工人文件:
FROM openjdk:8-jdk-alpine
MAINTAINER Liviu <liviucornelciobanu91@gmail.com>
# Add a volume pointing to /tmp
VOLUME /tmp
# Make port 9080 available to the world outside this container
EXPOSE 9080
# The application's jar file
ARG JAR_FILE=target/gateway-0.0.1-SNAPSHOT.jar
# Add the application's jar to the container
ADD ${JAR_FILE} gateway.jar
# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/gateway.jar"]
我已经找到了我的问题的解决方案。问题出在spring-cloud-网关上的DiscoveryClient路由定义定位器上。我在留档中看到:
可以将网关配置为基于向DiscoveryClient兼容服务注册表注册的服务来创建路由。要启用此功能,请设置spring . cloud . gateway . discovery . locator . enabled = true,并确保DiscoveryClient实现位于类路径上并已启用(如网飞尤里卡、领事或动物园管理员)。”
此属性不适用于Kubernate配置服务发现。我已经把它改成假的了,而且成功了!!问候
Lazy 微服务客户端 Sometimes you have to load initial data before you can create your @Client(). In this case, you can use ClientProxyFactory, which provides create() method. 有时候在创建@Client()之前你需要加载原始数据。这时,你可
我有一个包含10个微服务的微服务架构,每个微服务提供一个客户端。在由微服务团队管理/控制的客户机内部,我们只接收参数并将它们传递给一个通用http调用程序,该调用程序接收endpoint和N个params,然后进行调用。所有微服务都使用http和web api(我猜技术并不重要)。 对于我来说,作为微服务团队提供一个客户是没有意义的,应该是消费者的责任,如果他们想创建一些抽象或者直接调用它是他们的
我读了几篇文章,其中告诉我们关于微服务之间的通信,我选择了微服务之间基于事件的通信模式,但是现在我想知道客户端应该如何通信,如果它向API网关发送请求,应该等待响应(这可能需要时间,因为内部microsrvices之间的通信基于事件的性质),或者它应该说“处理”并进行轮询以检查请求是否完成? 客户的标准做法是什么
我有两个用Jhipster创建的微服务。(ms1和ms2) ms1有一些DTO类,用作REST API的输入和输出类。 从ms2我需要调用ms1的一些API,因此我需要那些DTO类来输入和输出数据。 MS2中显然没有这些DTO类。 所以我现在有两个选择: 1)将DTO类从ms1复制到ms2 2)将ms1导入为ms2中的maven依赖项 方法2-ms1和ms2都被打包为war文件,而不是jar文件。
我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se
我到处都读到微服务中的服务对服务调用应该是异步的。当请求必须通过2个或多个异步服务时,我们如何进行客户端确认? 这是我的实时场景。我们正在我们的组织中开发电子邮件发送功能。我们计划按以下顺序为此提供4个API服务。 公共API-将电子邮件功能公开给公共 验证API-验证电子邮件和其他字段的真实性 模板获取API-从数据库/CMS中获取电子邮件模板并准备要发送的最终内容 电子邮件发送API-将接收收
我最近对尝试将我的石头-纸-剪刀游戏改编成一个多人友好的程序感兴趣,所以今天我决定查阅一个关于服务器的教程。似乎我正在精确地跟踪它(除了使用不同的IDE之外)。然而,有些地方出了问题,我不确定到底是什么,它对教程制造商来说很好。我查过EOFException,但并没有帮到我。 Youtube上的教程 [关于EOFException的文档](我在这里有一个链接,但我需要至少10个声誉才能发布两个以上
问题内容: 我是一个优秀的程序员,但是我的网络经验为零。 基本上,我想进入客户端- 服务器网络。例如,我想尝试运行一个服务器进程,该进程允许客户端通过Internet连接并将ping发送到所有其他连接的客户端。然后,也许我将尝试开发一个简单的聊天客户端,或一些简单的多人游戏,然后从那里开始。 我非常了解可能有用的语言:Java,C ++,C。 我该如何开始?我想提前学习最佳实践,因此您可以推荐的良