1 搭建Eureka
新建一个maven模块或者工程,命名 eureka-server
在pom.xml文件中引入该依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
新建一个EurekaApplication.java启动类文件,代码如下
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class);
}
}
@EnableEurekaServer 自动装配 Eureka注册中心
新建配置文件,application.yml
server:
port: 8080
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
这段配置是将自己注册到指定地址的注册中心中,用于eureka集群,单一的注册中心可以不做配置。
启动该工程即可。访问该地址
说明已经启动成功。
2 如何使用
2.1 使用eureka有个前提,就是每个服务都需要先注册到eureka
假设现在有两个springboot工程,appleserver 和 bananaserver
在两个工程的配置文件中,统一追加依赖
<!-- eureka 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
统一追加配置,声明注册中心的地址
eureka:
client:
service-url:
defaultZone: http://localhost:8080/eureka
两个工程的配置文件中需要有工程命名的配置
spring: application: name: appleserver
spring: application: name: bananaserver
启动两个工程以及注册中心。
观察Eureka,发现服务列表中出现了appleserver和bananaserver
刚进入可能会不显示,因为注册中心默认的检测时间为30s,等待30s以上就可以看见如下效果。
2.2 eureka的使用
假设服务appleserver需要调用bananaserver的情况:
没有eureka的时候,appleserver需要配置bananaserver的ip地址
http://localhost:8081/banana/
现在有了eureka,只需要将ip+端口换成bananaserver的名字bananaserver
http://bananaserver/banana/
原理:appleserver到eureka中查找bananaserver这个服务可用的服务地址,然后对当前路径进行替换。
使用RestTemplate类(http请求工具类),可无需关心这些底层工作,专心开发
import org.springframework.web.client.RestTemplate
新建一个配置类,装配RestTemplate
/**
* 创建RestTemplate并注入
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
@LoadBalanced 声明负载均衡策略
当有同一种服务有多个服务实例时生效。
使用如下
@Autowired
private RestTemplate restTemplate;
String url="http://bananaserver/banana/getObj";
Banana banana=restTemplate.getForObject(url,Banana.class);
RestTemplate整合了json转实体类的方式,使用会方便一些