在完成了服务注册中心的搭建之后,接下来我们尝试将个既有的 Spring Boot 应用加 入 Emeka 的服务治理体系中去。可以使用上一章中实现的快速入门工程来进行改造, 将其作为一个微服务应用向服务 注册中心发布自己。 首先, 修改 pom.xml, 增加 Spring Cloud Eureka 模块的依赖, 具体代 码如下所示:

<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

接着, 改造/hello 请求处理接口, 通过注入 DiscoveryClient对象, 在日志中打印出服务的相关内容。

@RestController 
public class HelloController { 
    private final Logger logger = Logger.getLogger(getClass());
    @Autowired 
    private DiscoveryClient client;
    @RequestMapping(value = "/hello", method= RequestMethod.GET) 
    public String index() { 
        Service Instance instance = client.getLocalServiceinstance(); 
        logger.info("/hello, host:" + instance.getHost() + 
        ", service id:" +instance.getServiceid());
        return "Hello World";
    }
}

 

然后, 在主类中通过加上 @EnableDiscoveryClient 注解, 激活 Eureka 中的 DiscoveryClient 实现(自动化配置, 创建 DiscoveryClient 接口针对 Eureka 客户 端的 EurekaDiscoveryClient 实例), 才能实现上述 Controller 中对服务信息的输出。

@EnableDiscoveryClient 
@SpringBootApplication 
public class HelloApplication { 

    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}

最后 ,我们需要在 application.yml配置文件中,通 过 spring. application.name属性来为 服 务命名,比如命名 为 hello-service。 再通过 eureka.client. serviceUrl.defaultZone属性来指定服务注册中心的地址, 这里 我们指定为之前构建的服务注册中心地址, 完整配置如下所示:

spring.application.name=hello-service 
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

下面我们分别启 动服务注册中心以及这里改造后的hello-service 服务。 在hello-service服务控制台中,Tomcat启动之后,com.netflix.中scovery.DiscoveryClient 对象打印了该服务的注册信息 ,表示服务注册成功。

而此时在服务注册中心的控制台中,可以看到类似下面的输出,名为hello-service 的服务被注册成功了。

 

 

此版本比较旧只做学习参考

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐