当前位置 > it书童 > java > 正文

Eureka 注册以及获取服务

java it书童 2020-09-14 17:18:43 0赞 0踩 33阅读 0评论

将服务注册到Eureka

注册服务,就是在服务上添加Eureka的客户端依赖,客户端代码会自动把服务注册到EurekaServer中。

修改service-provider工程

  1. 在pom.xml中,添加springcloud的相关依赖。

  2. 在application.yml中,添加springcloud的相关依赖。

  3. 在引导类上添加注解,把服务注入到eureka注册中心。

具体操作

pom.xml

参照eureka,先添加SpringCloud依赖:

<!-- SpringCloud的依赖 -->
<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>

然后是Eureka客户端:

<!-- Eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml

server:
    port: 8082

spring:
    datasource:
        url: jdbc:mysql:///test
        username: root
        password: Mac_2020Pwd_Root
    application:
        name: service-provider # 作为微服务的名称

mybatis:
    type-aliases-package: com.itshutong.service.pojo

eureka:
    client:
        service-url:
            defaultZone: http://localhost:10086/eureka

注意:这里我们添加了spring.application.name属性来指定应用名称,将来会作为应用的id使用。

引导类

在引导类上开启Eureka客户端功能

通过添加 @EnableDiscoveryClient 来开启Eureka客户端功能

@SpringBootApplication
@MapperScan("com.itshutong.service.mapper") // Mapper 接口的包扫描
@EnableDiscoveryClient // 启用 eureka 客户端
public class ItshutongServiceProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ItshutongServiceProviderApplication.class, args);
    }
}

启动服务

从Eureka获取服务

接下来我们修改service-customer,尝试从EurekaServer获取服务。

方法与消费者类似,只需要在项目中添加EurekaClient依赖,就可以通过服务名称来获取信息了!

pom.xml 添加依赖,与服务提供方一致

修改配置

server:
    port: 85

spring:
    application:
        name: service-customer
eureka:
    client:
        service-url:
            defaultZone: http://localhost:10086/eureka

在启动类开启Eureka客户端

@SpringBootApplication
@EnableDiscoveryClient
public class ItshutongServiceCustomerApplication {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

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

}

修改 UserController 代码,用 DiscoveryClient 类的方法,根据服务名称,获取服务实例:

@Controller
@RequestMapping("customer/user")
public class UserController {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient; // 包含了拉取的所有服务信息

    @GetMapping
    @ResponseBody
    public User queryUserById(@RequestParam("id")Long id) {
        List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
        ServiceInstance instance = instances.get(0);
        return this.restTemplate.getForObject("http://"  + instance.getHost() + ":" + instance.getPort() + "/user/" + id, User.class);
    }
}

测试:http://localhost:85/customer/user?id=1

转载须注明出处:https://www.itshutong.com/articles/710/eureka-registration-and-access-to-services
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
发表评论
我有句话,不知当讲不当讲?
要讲之前请先 登录