1.创建eureka-server作为注册中心,引入相关依赖。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.在启动类中添加@EnableEurekaServer来启用Eureka注册中心。
3.配置eureka-server的application.yml文件。
server:
port: 8761 #eureka服务访问端口
eureka:
instance:
hostname: eureka-server #eureka实例的主机名
client:
register-with-eureka: false #不把自己注册到eureka上
fetch-registry: false #不从eureka上获取服务的注册信息
service-url:
defaultZone: http://localhost:8761/eureka/
4.创建provider-ticket作为服务提供者,引入相关依赖。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
5.配置provider-ticket的application.yml文件。
server:
port: 8002
spring:
application:
name: provider-ticket
eureka:
instance:
prefer-ip-address: true #注册服务时使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
6.创建Service。
@Service
public class TicketService {
public String getTicket(){
return "《Hello,SpringCloud》";
}
}
7.创建consumer-user作为服务消费者,引入和provider-ticket相同的依赖。
8.在启动类中添加@EnableDiscoveryClient开启发现服务功能。
9.配置consumer-user的application.yml文件。
spring:
application:
name: consumer-user
server:
port: 8200
eureka:
instance:
prefer-ip-address: true #注册服务时使用服务的ip地址
client:
service-url:
defaultZone: http://localhost:8761/eureka/
10.在启动类中添加方法创建RestTemplate对象,使用@Bean添加到容器中,并通过添加@LoadBalanced启用负载均衡机制,此机制下默认采用轮询方式。
@LoadBalanced //启用负载均衡机制(默认是轮询方式调用多台服务器,这里是通过多个provider的jar包启动来模拟集群)
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
11.创建Controller,使用RestTemplate对象调用eureka中注册的服务方法,其中url参数格式为http://+服务名称+请求方法的映射路径。其中,服务名称可以通过访问http://localhost:8761进行查看,已注册的服务信息都可以在上面查找到。
@RestController
public class UserController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/buy")
public String buyTicket(String name){
//访问localhost:8761中注册的PROVIDER-TICKET服务的/ticket请求
//获取电影票并转成字符串
String s=restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class);
return name+"购买了"+s;
}
}