我有一个在端口8761(localhost:8761/eureka)上运行的Eureka服务器,我有一个Zuul应用程序,我想在eureka注册,但我一直得到同样的错误:
Can't get a response from http://localhost:8761/eurekaapps/ZUULSERVER
Can't contact any eureka nodes - possibly a security group issue?
java.lang.RuntimeException: Bad status: 404
at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1155)
at com.netflix.discovery.DiscoveryClient.makeRemoteCall(DiscoveryClient.java:1060)
at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:606)
at com.netflix.discovery.DiscoveryClient$HeartbeatThread.run(DiscoveryClient.java:1596)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
这是zuul应用程序的application.yml:
info:
component: Zuul Server
eureka:
server:
enabled: true
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
registerWithEureka: true
fetchRegistry: false
endpoints:
restart:
enabled: true
shutdown:
enabled: true
health:
sensitive: false
zuul:
route:
discovery:
url: http://localhost:9000/polaris/discovery
path: /polaris/discovery/**
sla:
url: http://localhost:9000/polaris/sla
path: /polaris/sla/**
stores: …Run Code Online (Sandbox Code Playgroud) 我用gradle构建了一个Spring-Service,我想和它一起使用Eureka-Server。我的java文件看起来像这样:
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
public class Welcome {
....
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用gradle文件构建它时,它说:
org.springframework.cloud.netflix.eureka.server不存在
我正在寻找解决此问题的方法,但似乎一个人呆着。有人知道为什么它不起作用吗?我是否需要在build.gradle文件中写一些特定的东西?
我正在使用微服务架构构建Rest api.我有多个api用户,我们已经进入多个项目.除了我无法将面向用户的用户映射到zuul中的应用程序URL之外,我还准备好了其他所有内容.
面向网址的用户是:user/v1/accountholders/{id}/cards,我的应用程序的实际网址是/ user-cards/v1/accountholders/{id}/cards.
这里的id是路径变量.下面是其他类似的api url,所以如果有一种方法在zuul中一般配置它们.此外,应用程序URL的上下文根也是Eureka中的项目名称.
Other similar urls are:
client side:- /user/v1/accountholders/{id}/cards/{cardid}
application:- /user-cards/v1/accountholders/{id}/cards/{cardid}
client side:- /user/v1/accountholders
application:- /user-cardholder/v1/accountholder
client side:- /user/v1/accountholders
application:- /user-cardholder/v1/accountholder
client side:- /user/v1/accountholders/{id}
application:- /user-cardholder/v1/accountholders/{id}
client side:- /user/v1/accountholders/{id}/accounts
application:- /user-accounts/v1/accountholders/{id}/accounts
client side:- /user/v1/accountholders/{id}/accounts/{accid}
application:- /user-accounts/v1/accountholders/{id}/accounts/{accid}
Run Code Online (Sandbox Code Playgroud)
需要一些帮助来在zuul的属性或yml文件中进行设置.我还没有能够在映射中取得任何进展.任何输入都会有所帮助.
解决: - 从@Daniel获得输入后(这是接受的答案)这是我在zuul配置中使用的: -
zuul:
routes:
User-Cards:
path: /user/v1/accountholders/*/cards/**
url: http://desktop-uvkv1ed:9999/user-cards/v1/accountholders
User-Transactions1:
path: /user/v1/accountholders/*/transactions
url: http://desktop-uvkv1ed:5555/user-transactions/v1/accountholders
service-id: User-Transactions
User-Transactions2:
path: /user/v1/accountholders/*/accounts/*/transactions
url: http://desktop-uvkv1ed:5555/user-transactions/v1/accountholders
service-id: User-Transactions
User-Accounts:
path: /user/v1/accountholders/*/accounts/**
url: http://desktop-uvkv1ed:7777/user-accounts/v1/accountholders
User-Cardholders:
path: /user/v1/accountholders/**
url: http://desktop-uvkv1ed:8888/user-cardholders/v1/accountholders
Run Code Online (Sandbox Code Playgroud) spring-boot microservices spring-cloud netflix-eureka netflix-zuul
我正在研究春天可以.我现在拥有的是spring cloud配置服务器和eureka服务器.
配置服务器的代码
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
application.properties
spring.application.name=config-server
spring.cloud.config.server.git.uri=https://github.com/vincentwah/spring-cloud-config-repository/
server.port=7001
Run Code Online (Sandbox Code Playgroud)
Eureka服务器的代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
bootstrap.properties
spring.application.name=eureka-server
spring.cloud.config.uri=http://localhost:7001/
Run Code Online (Sandbox Code Playgroud)
eureka-server的配置是https://github.com/vincentwah/spring-cloud-config-repository/blob/master/eureka-server.properties
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
server.port=1111
Run Code Online (Sandbox Code Playgroud)
当我启动eureka服务器时,我想更改端口,所以我运行下面的命令
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --server.port=1234
Run Code Online (Sandbox Code Playgroud)
但是,服务器仍然使用端口1111启动
2017-01-03 14:04:11.324 INFO 6352 --- [ Thread-10] c.n.e.r.PeerAwareInstanceRegistryImpl : Changing status to UP
2017-01-03 14:04:11.339 INFO 6352 --- [ Thread-10] e.s.EurekaServerInitializerConfiguration : Started Eureka Server …Run Code Online (Sandbox Code Playgroud) 我是Spring-Boot(Cloud)的新手,正在从事一个新项目。
我们的项目架构师已经设计了这个新应用程序,如下所示:
现在,以下是我感到困惑的事情,我不能问他,因为他对我来说太老了:
曾经在类似情况下工作过的人可以阐明我的疑问吗?
node.js spring-boot spring-cloud netflix-eureka spring-cloud-netflix
我如何从尤里卡获取已经注册的服务?
以下代码提供了有关特定服务的详细信息。但是我想要注册服务的清单。
码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
@RestController
class ServiceInstanceRestController {
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/service-instances/{applicationName}")
public List<ServiceInstance> serviceInstancesByApplicationName(
@PathVariable String applicationName) {
return this.discoveryClient.getInstances(applicationName);
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用docker image启动我的应用程序(Spring Boot + Spring Cloud + Eureka + MongoDB),但我无法连接到MongoDB.
例外:
exception "com.mongodb.MongoSocketOpenException: Exception opening socket."
Run Code Online (Sandbox Code Playgroud)
我用execute命令启动我的应用程序:docker-compose up --build
Docker日志:
application.yml:
# Spring properties
spring:
application:
name: car-service
data:
mongodb.host: localhost
mongodb.port: 32769
mongodb.uri: mongodb://localhost/test
mongo.repositories.enabled: true
# Discovery Server Access
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
# HTTP Server (Tomcat) Port
server:
port: 2220
error:
whitelabel:
enabled: false
Run Code Online (Sandbox Code Playgroud)
泊坞窗,compose.yml:
eureka:
build: ./eureka-discovery-service
ports:
- "8761:8761"
mongodb:
image: mongo:3.0.4
ports:
- "32769:32769"
postgresql:
image: postgres:9.6.1
ports:
- "32770:32770"
gateway-service:
build: …Run Code Online (Sandbox Code Playgroud) 我读到Eureka客户端的实例ID必须是唯一的,当我们希望运行同一个Eureka Client的多个实例时,我们添加了这个属性:
eureka.instance.instance-id==${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${random.value}}
Run Code Online (Sandbox Code Playgroud)
实例Id的意义是什么?上述行如何重要?
我正在从http://www.javainuse.com/spring/spring-cloud-netflix-zuul-tutorial开发代码,尚未进行自定义。我不断收到下面提到的错误。因此,为避免此错误,我在application.properties文件中添加了以下内容。
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
eureka.client.server.waitTimeInMsWhenSyncEmpty=0
Run Code Online (Sandbox Code Playgroud)
我添加以上属性的那一刻,我没有收到任何错误。
以下错误供参考-
com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect
at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:187) ~[jersey-apache-client4-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.filter.GZIPContentEncodingFilter.handle(GZIPContentEncodingFilter.java:123) ~[jersey-client-1.19.1.jar:1.19.1]
at com.netflix.discovery.EurekaIdentityHeaderFilter.handle(EurekaIdentityHeaderFilter.java:27) ~[eureka-client-1.4.12.jar:1.4.12]
at com.sun.jersey.api.client.Client.handle(Client.java:652) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) ~[jersey-client-1.19.1.jar:1.19.1]
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:509) ~[jersey-client-1.19.1.jar:1.19.1]
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:194) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:119) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) …Run Code Online (Sandbox Code Playgroud) 我正在关注这个非常出色的教程:https://github.com/binblee/springcloud-swarm
当我将堆栈部署到包含单个节点(仅是管理器节点)的Docker群时,它可以完美运行。
docker stack deploy -c all-in-one.yml springcloud-demo
Run Code Online (Sandbox Code Playgroud)
我有四个Docker容器,其中一个是Eureka服务发现,其他三个容器都已成功注册。
问题是,当我将一个工作程序节点添加到群集时,然后将两个容器部署到工作程序,将两个容器部署到管理程序,并且部署到工作程序节点的服务找不到Eureka服务器。
java.net.UnknownHostException: eureka: Name does not resolve
Run Code Online (Sandbox Code Playgroud)
这是我的撰写文件:
version: '3'
services:
eureka:
image: demo-eurekaserver
ports:
- "8761:8761"
web:
image: demo-web
environment:
- EUREKA_SERVER_ADDRESS=http://eureka:8761/eureka
zuul:
image: demo-zuul
environment:
- EUREKA_SERVER_ADDRESS=http://eureka:8761/eureka
ports:
- "8762:8762"
bookservice:
image: demo-bookservice
environment:
- EUREKA_SERVER_ADDRESS=http://eureka:8761/eureka
Run Code Online (Sandbox Code Playgroud)
另外,我只能在其部署到的主机上访问Eureka Service Discovery服务器。
我认为使用“ docker stack deploy”会自动创建一个覆盖网络,在该网络中,所有公开的端口都将路由到运行相应服务的主机:
从https://docs.docker.com/engine/swarm/ingress/:
所有节点都参与入口路由网格。路由网格使群集中的每个节点都可以接受群集中运行的任何服务的已发布端口上的连接,即使节点上没有任何任务在运行。
这是docker service ls的输出:
manager:~/springcloud-swarm/compose$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
rirdysi0j4vk springcloud-demo_bookservice replicated 1/1 …Run Code Online (Sandbox Code Playgroud) netflix-eureka ×10
spring-cloud ×6
spring-boot ×5
java ×3
spring ×3
netflix-zuul ×2
docker ×1
docker-swarm ×1
import ×1
mongodb ×1
netflix ×1
node.js ×1