隐藏

eureka搭建踩过的坑

发布:2023/9/28 14:49:03作者:管理员 来源:本站 浏览次数:442

1、配置eureka服务端和客户端遇到的坑,服务端需要指定eureka.client.serviceUrl.defaultZone=指定的服务端,否则他会连接默认的http://localhost:8761/eureka,因为eureka服务端默认指定了一个地址,查看org.springframework.cloud.netflix.eureka.EurekaClientConfigBean的源码可知。

    服务端使用:spring-cloud-starter-netflix-eureka-server,网上很多地方使用spring-cloud-starter-eureka-server,maven官网提示该jary已经被废弃了

    客户端使用:pring-cloud-starter-netflix-eureka-client,和服务端一样,网上很多地方说的pring-cloud-starter-eureka-client也被废弃了。


2、eureka采用的是高可用的原理,如果一个服务注册进了eureka server服务端上,哪怕是这个服务down了,eureka server在短期内,还是认为你这个服务是可用的,所以在接入服务的时候,有可能会存在,你服务已经down了,但是在eureka服务端却还看到了哪个服务。


3、注册中心集群,服务和服务之间要相互注册,但是自己就不要在自己上面注册了。注册中心的集群实现原理就是把注册中心都看成是一个服务提供者一样去集群的其他节点中相互配置,从而达到高可用。


3、eureka.client.server-url.defaultZone:地址可以接收多个值,这里就是给服务设置连接哪个注册中心的。


4、如果要点击服务端控制台上服务的名字,然后显示服务的信息。

可以在服务提供者,也就是客户端的pom文件上添加actuator的依赖,然后再properties的文件上添加显示的提示信息。


服务端搭建流程:


1、pom添加依赖。



       <!--

           eureka服务端需要的依赖

           网上很多地方说使用spring-cloud-starter-eureka-server,这个依赖已经被废弃了

           maven官网上推荐使用spring-cloud-starter-netflix-eureka-server

       -->

       <dependency>

           <groupId>org.springframework.cloud</groupId>

           <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

           <version>2.1.0.RELEASE</version>

       </dependency>


  


2、yml修改。


#这个项目中使用到的域名eureka-8082.com,类似于这种的eureka-8082.com,都是做了地址模拟映射的,实际开发中就是买域名,买服务器,然后做映射。

#这里就是在host文件中做了一个本地的dns域名映射


server.port=8081



#数据库连接信息

spring.datasource.username=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.password=root

spring.datasource.url=jdbc:mysql://localhost:3306/hyly?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&serverTimezone=Hongkong



#eureka server服务端配置

#eureka实例所在地址

eureka.instance.hostname=eureka-8081.com


#是否将自己注册到eureka server上

eureka.client.register-with-eureka=false


#false表示自己就是注册中心,我的至此就是维护服务实例,并不需要去检索实例

eureka.client.fetch-registry=false


#指定eureka server的地址,及时是eureka server自身也要定义一下,否则到时候服务接入的时候

#不指定eureka.client.serviceUrl.defaultZone的话,eureka会默认指定成http://localhost:8761/eureka,地址

#eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

#${eureka.instance.hostname}指的就是当前这个文件中配置的这个值,${server.port}同理也一样


#eureka集群,如果不配置集群的话就只需要指定一个就可以了,与另外两个做集群,当前eureka-server不用加入到这里

eureka.client.service-url.defaultZone=http://eureka-8082.com:8082/eureka,http://eureka-8083.com:8083/eureka


 


3、主启动类启用。


/**

* eureka-server注册中心服务端,用来监听eureka-client的服务

* eureka-server负责监测服务的状态

*

* @EnableEurekaServer: 启用eureka服务,并且接收其他服务注册进来

*/

@SpringBootApplication

@EnableEurekaServer

public class EurekaServerAppStart1 {

   public static void main(String[] args) {

       SpringApplication.run(EurekaServerAppStart1.class,args);

   }

}


 


4、进入注册页面查看是否成功。

http://localhost:端口号/eureka


客户端搭建流程:


1、pom添加依赖。


<!--eureka-client 客户端依赖-->

       <dependency>

           <groupId>org.springframework.cloud</groupId>

           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

           <version>2.1.1.RELEASE</version>

       </dependency>


 


2、yml修改,指定连接的注册中心


#这个项目中使用到的域名eureka-8082.com,类似于这种的eureka-8082.com,都是做了地址模拟映射的,实际开发中就是买域名,买服务器,然后做映射。

#这里就是在host文件中做了一个本地的dns域名映射


server.port=9091


#指定项目的名称

spring.application.name=SERVER1DEPTSERVER


spring.datasource.username=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.password=root

spring.datasource.url=jdbc:mysql://localhost:3306/hyly?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&serverTimezone=Hongkong



#mapper的xml配置文件地址

mybatis.mapper-locations=classpath:/mapper/*.xml

mybatis.config-location=classpath:/mybatis-config.xml




#配置eureka-client客户端

#鼠标移到服务状态上面左下角显示的名称,这个可配可不配置

#eureka.instance.hostname=deptServer


#显示在eureka-server上的一个查看状态的名字,这个可配可不配置

#eureka.instance.instance-id=deptServer

#和eureka.instance.instance-id作用一致,不过这个属性就是将查看状态的名字换成了ip地址加服务名,这个可不配置

eureka.instance.prefer-ip-address=true


# 指定当前服务要注册进哪个注册中心,选择指定的eureka-server

#eureka.client.service-url.defaultZone=http://eureka-8081:8081/eureka/


#指定当前服务注册进哪个注册中心,这里做了集群,所以需要配置多个,如果访问这三个eureka-server服务端控制台都有注册服务就说明配置成功了

eureka.client.service-url.defaultZone=http://eureka-8081.com:8081/eureka/,http://eureka-8082.com:8082/eureka/,http://eureka-8083.com:8083/eureka/


#当前服务是否注册进eureka server服务端上

eureka.client.register-with-eureka=true


#当前服务是否检索有服务注册进来

eureka.client.fetch-registry=false


#当前服务的一些基础信息

info.app.name=eureka-server1

info.company.name=com.syzw

info.build.artifactid=$project.artifactId$

info.build.version=$project.version$



 


3、主启动类启用。



@SpringBootApplication

/***

* 该项目是服务提供者,这里有几个项目是为了做集群

* 服务集群了就可以设置成不同的数据库,也就做到了数据库的集群

*/

@EnableEurekaClient

/**

* 开启服务熔断

*/

@EnableCircuitBreaker

public class AppDeptServerStater {

   public static void main(String[] args) {

       SpringApplication.run(AppDeptServerStater.class,args);

   }

}


 


4、进入服务端控制台页面查看是否注册成功。

http://localhost:端口号/eureka,查看该页面上是否有服务实例。


eureka和zookeeper的区别?

eureka是高可用。

zookeeper是一致性。


其实注册中心就像手机电话簿一样

当我想给张三打电话时,那我需要在通讯录中按照名字找到张三,然后就可以找到他的手机号拨打电话。


李四办了手机号,那么他把手机号告诉我,我把李四的号码存进通讯录,后续,我就可以从通讯录找到他。


上述两个场景就是我们在微服务架构中常常提到的:


服务发现


服务注册