0、为什么需要eureka
当我们从当体系统拆分为多个独立服务项目之后,如果aaa.com/uer、aaa.com/order;;相互之间调用,如果只是一个服务一个实例,那还可以直接通过固定地址(如http://111.111.11.1:7119/user/getuser/1)直接访问;
但是,我们一个服务有很多个实例,这样你就不能写死地址了吧,多个之间你得挑出一个来调用吧(负载均衡),还有多个实例有的停止了,有的新加入了,这你得心跳检测健康监测吧等等;这些,都是从单体系统拆分后面临的实际问题,你可以自己一个一个去克服和实现;当遇到了spring cloud,哈哈,你有福了,spring cloud eureka正是为你解决以上问题而来;
eureka服务发现组件包含eureka server(服务注册中心)和eureka client(服务注册与发现);本身通过心跳检测(默认30S)进行服务的注册与发现与健康检查
一、eureka集成
1、eureka server
1、1、添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1、2、配置文件增加配置
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
enable-self-preservation: false
spring:
application:
name: eurka-server
1、3、启动类增加 @EnableEurekaServer 注解
@SpringBootApplication
@EnableEurekaServer
public class application
{
public static void main(String[] args)
{
SpringApplication.run(application.class);
}
}
一个eureka server就完成了,启动运行
还没有服务实例,因为我们还没添加,好,下面我们来添加eureka client
2、eureka client
2、1、添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、2、修改配置文件
server:
port: 8763
spring:
application:
name: user
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
2、3、启动类中增加 @EnableEurekaClient 注解
@SpringBootApplication
@EnableEurekaClient
@EnableHystrixDashboard
public class application
{
public static void main(String[] args)
{
SpringApplication.run(application.class);
}
}
完成
我们在controller里面添加一个方法进行测试
@RestController
@RequestMapping("/user")
public class UserController
{
@Autowired
private ServiceUtil serviceUtil;
@RequestMapping("/hello")
public String Hello()
{
return ("hello world" +serviceUtil.getPort());
}
}
3、测试
先启动eureka server 项目,再启动client项目,我们可以看到,client的服务实例已经注册进来了
再切换端口增加一个实例,可以看到,也注册进来了,这样就可以通过eureka管理多个服务的多个实例以及相互之间调用的问题了
GIT源码后面再放出