Eureka用于服务注册与发现,由两个组件组成:Eureka服务端和Eureka客户端。
一、Eureka服务端的配置
1.1 所需依赖
只需要这两个就行了
security是安全框架
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
1.2 application.properties配置文件
# 端口
server.port=10000
# 应用别名
spring.application.name=eureka-server
# 因为当前的eureka是单机的 所以需要做一些配置
# eureka服务的ip地址 这里是在本机做测试
eureka.instance.hostname=localhost
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://user:123@${eureka.instance.hostname}:${server.port}/eureka/
# 管理页面的账号密码 spring boot2.x版本后的写法
spring.security.user.name=user
spring.security.user.password=123
但使用spring boot2.x的话直接写http://user:123@${eureka.instance.hostname}:${server.port}/eureka/是无法注册的,需要写一个spring security的配置类禁用security的csrf才可以在eureka上注册
@Configuration
@EnableWebSecurity
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* 禁用security的csrf
*
* @param http HttpSecurity
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
}
}
1.3 启动类
@EnableEurekaServer注解表示此项目为eureka的服务端
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {
public static void main(String[] args) {
SpringApplication.run(EurekaApp.class, args);
}
}
以上全都准备好之后运行项目,输入http://ip:端口就可以访问eureka管理页面
二、eureka客户端
在最简单的微服务程序中的“生产者”和“消费者”都可以称得上是客户端,需要注册到eureka中
2.1 所需依赖
eureka客户端的依赖就这么一个
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 application.properties配置文件
以消费者项目为例要注册到eureka服务中
user:123是eureka服务端设置的账号和密码
spring.application.name设置应用的别名 可以和别的项目重名 重名用于高可用
# 端口
server.port=8900
# 应用别名
spring.application.name=consumer
eureka.client.service-url.defaultZone=http://user:123@localhost:10000/eureka
2.3 服务调用
在消费者端调用生产者的接口现在就可以将代码改写了
首先要写一个配置类配置要用到的RestTemplate类
@Configuration
public class RestTemplateConfig {
/**
* 配置注入restTemplate
* @param builder Spring提供的RestTemplateBuilder
* @return restTemplate对象
*/
@Bean
public RestTemplate getRestTemplate(RestTemplateBuilder builder){
return builder.build();
}
}
然后在controller类中调用生产者的接口
“PROVIDER”为生产者项目的应用别名
@RestController
public class OrderController {
@Autowired
private EurekaClient eurekaClient;
/**
* spring提供的一个用于访问rest接口的对象
*/
@Autowired
private RestTemplate restTemplate;
@GetMapping("/order/{id}")
public User getOrder(@PathVariable Integer id) {
//找提供者
InstanceInfo instanceInfo = eurekaClient.getNextServerFromEureka("PROVIDER", false);
String url = instanceInfo.getHomePageUrl();
return restTemplate.getForObject(url + "/user/" + id, User.class);
}
}
