spring cloud eruka 注册中心的异常处理之-----java.net.UnknownHostException:主机名

项目背景:

采用Spring Cloud+IDEA+Maven搭建了由多个微服务组成的项目,部署上线是在多个阿里服务器里的。

问题描述:

部署上线过程中,各个微服务都正常启动,而且都注册到了eureka注册中心,但是相互调用时报java.net.UnknownHostException:主机名的错误。

问题原因思考:

各个微服务是以“主机名:服务名:端口”的形式注册到注册中心。当发布测试时,服务器用的是同一个,为localhost,所以能找到主机并相互调用。当部署上线时,每个微服务运行在不同主机,主机名都各不相同,所以调用时找不到目标主机在哪。

解决方法:

让微服务以“ip:端口”的形式注册,这里的ip指的是部署的主机ip。
在每个需要注册的微服务的application.properties文件中添加如下:

eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=ip地址:端口

### 更换 Spring Cloud 注册中心Eureka 到 Zookeeper 的实现方法 #### 修改依赖项 为了将注册中心Eureka 转变为 Zookeeper,在项目中的 `pom.xml` 文件内需移除与 Eureka 相关的依赖并引入支持 Zookeeper 的相应库。具体操作如下: ```xml <!-- 移除原有的Eureka客户端依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 添加Zookeeper的支持 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> </dependency> ``` 此更改确保应用程序能够连接到 Zookeeper 并将其用作新的服务发现机制[^3]。 #### 更新应用配置文件 接下来更新 `application.yml` 或其他形式的应用程序属性文件来指定使用 Zookeeper 作为服务发现选项。以下是具体的设置示例: ```yaml server: port: 8004 spring: application: name: cloud-provider-payment8004 eureka: client: service-url: defaultZone: http://localhost:7001/eureka/ zookeeper: discovery: enabled: true connect-string: localhost:2181 ``` 注意,对于某些版本而言可能还需要额外设定诸如 `register` 参数为 `true` 来保证正常工作[^4]。 #### 启动类调整 最后一步是在启动类中启用对 Zookeeper 的自动配置支持。这通常通过添加特定于 Zookeeper 发现能力的注解完成: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDiscoveryClient // 使用这个替代 @EnableEurekaClient public class PaymentMain8004 { public static void main(String[] args){ SpringApplication.run(PaymentMain8004.class, args); } } ``` 上述代码片段展示了如何切换至基于 Zookeeper 的服务发现模式,并保持与其他微服务之间的兼容性[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值