eureka官网:https://github.com/Netflix/eureka
eureka注册中心:
一、启动eureka
eureka也是一个服务,所以也要为eureka创建一个module,只是这个module的大部分功能spring已经为我们写好了,我们只需要引入依赖稍加配置就行了。
在cloud-demo中新建一个module,命名为eureka-server(随意命名)
1、pom中添加eureka依赖
<dependencies>
<!-- Eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2、创建程序运行主类
package cn.itcast;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class);
}
}
3、配置
在application.yml中配置相关数据
server:
port: 10086
spring:
application:
name: eureka-server
服务运行端口
服务名(必须,无论是eureka还是其他服务都要有服务名,且唯一)
启动项目,访问http://localhost:10086/即可进入以下页面(eureka主页):
此时eureka注册中心服务器端已重新启动,
但注册中心是至关重要的,如果注册中心宕机则一切服务之间的交互都不能正常运作,所以我们要给注册中心配置集群,当为eureka搭建集群时,每一个eureka即是一个服务端,又是一个客户端,每一个eureka都要讲自己作为服务注册到其他eureka中,所以此时eureka又是客户端。
作为客户端就要配置所要注册到哪个eureka服务,就要配置那个eureka服务的地址。
所以eureka要将自己注册到自己中
以下配置:
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka
上述配置的是service-url的值,她的值是一个键值对形式,defaultZone是键,http://localhost:10086/eureka是值。
localhost可以改成所需要的ip
再次启动eureka,刷新页面
我们可以看到eureka中已经出现了相应服务。
总结
- 1、pom文件引入依赖
<dependencies>
<!-- Eureka服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 2、创建启动类,添加eureka注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class);
}
}
- 3、配置application.yml
spring:port: 10086
eureka:application: name: eureka-server
client: service-url: defaultZone: http://localhost:10086/eureka
二、将其他服务注册到注册中心eureka中
1、pom文件中添加依赖(eureka的client依赖)
<!--eureka-client 注册中心 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、启动类上添加注解 @EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("cn.itcast.user.mapper")
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class);
}
}
3、配置application.yml(服务名,要注册的地址)
spring:
application:
name: consumer-service
eureka:
client:
service-url:
defaultZone: http://localhost:10086/eureka
运行(可以先运行eureka,再运行其他服务,启动eureka会报错,因为启动的时候扫描到yml中的注册配置,但是此时注册中心eureka还没有启动起来,无法将自己注册到自己中,所以会报错。启动之后就不会报错了)
刚开始可能访问到之后没有显示注册了其他服务,要等一会儿才能看到里面已经将其他服务注册进去
将服务注册到注册中心后,就可以动态获取服务了(不用固定url端口等,想要的服务直接去注册中心获取,让注册中心给)
三、从注册中心取服务
将user-service和consumer-service注册到注册中心过后,就能从注册中心取服务
在consumer-demo中ConsumerController里,将DiscoveryClient注入到spring中
@Autowired
private DiscoveryClient discoveryClient;
//import org.springframework.cloud.client.discovery.DiscoveryClient;
在方法中获取
//根据服务id获取实例
List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
//从实例中获取ip和端口
ServiceInstance serviceInstance = instances.get(0);
String url = "http://"+ serviceInstance.getHost() + ":" + serviceInstance.getPort() +"/user/" + id;
User user = restTemplate.getForObject(url,User.class);