我正在尝试编写一个简单的SpringBoot应用程序,它可以(1)向Netflix的Eureka服务器注册,以及(2)查询Eureka服务器以检索其他已注册服务的详细信息。
我的客户端类有一个com.netflix.discovery.DiscoveryClient
类型的@Autowired
字段,用于与Eureka对话并查询它以了解其他服务。在我的主类上,我有注解@EnableDiscoveryClient
:
@SpringBootApplication
@EnableDiscoveryClient
public class AppBootstrap {
public static void main(String[] args) {
SpringApplication.run(AppBootstrap.class, args);
}
}
在src/main/resources下的application.yml
文件中,我有:
eureka:
instance:
lease-renewal-interval-in-seconds: 10
lease-expiration-duration-in-seconds: 20
prefer-ip-address: true
secure-port: 443
non-secure-port: 80
metadata-map:
instanceId: my-test-instance
client:
service-url:
defaultZone: http://localhost:9080/eureka/
registry-fetch-interval-seconds: 6
instance-info-replication-interval-seconds: 6
register-with-eureka: true
fetch-registry: true
heartbeat-executor-thread-pool-size: 5
eureka-service-url-poll-interval-seconds: 10
当我启动应用程序时,服务无法启动,引发根目录为的异常:
- 原因:java.lang.AbstractMethodError:网站名称:eureka.示例配置Bean. getInstanceI d()语言/字符串;获取(EurekaConfigBasedInstanceInfoProvider. java:53)在com. netflix.应用程序信息管理器. initComponent(应用程序信息管理器. java:90)... 25更多**
我不知道这里发生了什么。有什么想法吗?我相信应用程序仍然应该启动,即使我的Eureka 配置是不正确的,但它在启动时间跌倒了。
第二,我使用的DiscoveryClient是否正确?理想情况下,我希望它是通用的,这样我就可以将其作为示例用于Eureka、Consul或ZooKeeper。我发现文档并不擅长说明使用这些Spring Cloud/Netflix发现组件时需要什么。
4条答案
按热度按时间ghhkc1vu1#
您可以使用
然后您可以使用discoveryClient.getInstances获取示例列表
如果您使用其他组件,如RestTemplate、Ribbon等,则只需在URL中使用服务的名称(在eureka中注册的名称
您可以在这里看到更多
https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka
sshcrbum2#
在我的经验中,当我使用discoveryclient在任何函数之外获取类中的信息时,我收到了自动安装错误。因此,我使用Eureka 来查找我的服务的端口,因为端口被描述为0,因此服务在作为spring Boot 应用程序启动时动态拾取端口。我需要以编程方式知道端口。在控制器中,我错误地使用了如下代码
一旦我把端口代码放进sayhello方法,错误就消失了,所以正确的检索端口的方法如下
2hh7jdfx3#
如果我们使用的是最新版本的SpringBoot,那么我们就不需要在主类中定义@EnableDiscoveryClient或@EnableEurekaClient,当我们在pom.xml中添加依赖项时,Spring会在后台执行此操作
请确保您的文件包含以下基本信息。
No changes or @ Annotations required in the main class in Application.java
请检查我的GIT Repository here的工作代码。
9avjhtql4#
添加应用程序.yml文件这些设置;
我们的产品应用程序在此端口运行
服务器:端口:8482
我们的服务将按自己的服务名注册
Spring:应用:名称:产品-服务