创建“服务提供方”
创建一个提供个人信息服务的客户端,并向服务注册中心注册自己。
假设我们有一个提供个人服务功能的微服务模块,我们实现一个RESTful API,通过传入两个参数firstname和lastname,最后返回问候的结果。
首先,创建一个基本的Spring Boot应用,在pom.xml中,加入如下配置:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</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>
其次,实现/person请求处理接口,通过DiscoveryClient对象,在日志中打印出服务实例的相关内容。
@RestController
public class PersonServiceController {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
private DiscoveryClient client;
@RequestMapping(value = "/person", method = RequestMethod.GET)
public String person(@RequestParam String firstname, @RequestParam String lastname){
ServiceInstance instance = client.getLocalServiceInstance();
String r = "Hello " + lastname + " " + firstname + "!";
logger.info("/person, host:" + instance.getHost() + ", service_id:" + instance.getServiceId() + ", result:" + r);
return "From Person Service, Result is " + r;
}
}
然后主类中加上@EnableDiscoveryClient注解,该注解能激活Eureka中的DiscoveryClient实现,实现Controller中对服务信息的输出。
@EnableDiscoveryClient
@SpringBootApplication
public class PersonServiceApplication {
public static void main(String[] args) {
SpringApplication.run(PersonServiceApplication.class, args);
}
}
完成了服务内容的实现之后,我们就可以对application.properties做一些配置,具体如下:
spring.application.name=person-service
server.port=2223
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
通过spring.application.name属性,
可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。
eureka.client.serviceUrl.defaultZone属性
对应服务注册中心的配置内容,指定服务注册中心的位置。
为了在本机上测试区分服务提供方和服务注册中心,可以使用server.port
属性设置不同的端口。
启动该工程后,再次访问:http://localhost:1111/
可以看到,我们定义的服务被注册了。
访问:http://localhost:2223/person?firstname=William&lastname=Sun
你会看到如下结果:
该工程可参见:person-service