spring cloud的服务注册与发现是分布式架构中核心的一部分,由服务注册中心,服务提供者,服务消费者构成。
- 创建服务注册中心
1.1:创建cloud_eureka_server(服务注册中心)maven项目,pom.xml配置:加入eureka的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
其它通用配置请查看前言通用配置
1.2:application.properties配置:
server.port=10003
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
1.3:创建启动类:
通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话
@EnableEurekaServer
@SpringBootApplication
public class CloudEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaServerApplication.class, args);
}
}
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为。
2. 创建服务提供者
2.1:创建cloud_eureka_service1项目,pom.xml配置如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
其它通用配置请查看前言通用配置
2.2:application.properties配置:
spring.application.name=compute-service
server.port=10004
eureka.client.serviceUrl.defaultZone=http://localhost:10003/eureka/
eureka.client.serviceUrl.defaultZone属性对应服务注册中心的配置内容,指定服务注册中心的位置。
2.3主启动类:
@EnableDiscoveryClient
@SpringBootApplication
public class CloudEurekaService1Application {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaService1Application.class, args);
}
}
@EnableDiscoveryClient能激活Eureka中的DiscoveryClient实现,才能实现Controller中对服务信息的输出。
2.4创建计算服务API:
@RestController
public class CalculateWeb {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping("add")
public String add(@RequestParam Integer a, @RequestParam Integer b) {
ServiceInstance instance = client.getLocalServiceInstance();
Integer r = a + b;
logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r);
return r.toString();
}
}
3 创建服务消费者
3.1创建服务cloud_eureka_ribbon 项目,pom配置如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
其它通用配置请查看前言通用配置
3.2:application.properties配置:
spring.application.name=ribbon-consumer
server.port=10006
eureka.client.serviceUrl.defaultZone=http://localhost:10003/eureka/
3.3:创建主启动类:
@SpringBootApplication
@EnableDiscoveryClient
public class CloudEurekaRibbonApplication {
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(CloudEurekaRibbonApplication.class, args);
}
}
3.4创建计算API,调用服务提供者对外暴露接口:
@RestController
public class ConsumerController {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add() {
return restTemplate.getForEntity("http://COMPUTE-SERVICE/add?a=10&b=20", String.class).getBody();
}
}
4:主要工作都已完成。然后依次启动服务注册中心,服务提供者,服务消费者。
访问:http://localhost:10003 可以看到服务已经被注册。
访问:http://localhost:10006/add 返回30,同时控制台将打印出调用日志。