Spring Cloud构建微服务架构之二 创建一个服务

创建“服务提供方”

创建一个提供个人信息服务的客户端,并向服务注册中心注册自己。

假设我们有一个提供个人服务功能的微服务模块,我们实现一个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/
可以看到,我们定义的服务被注册了。

图片.png

访问:http://localhost:2223/person?firstname=William&lastname=Sun
你会看到如下结果:

图片.png

该工程可参见:person-service

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容