1. 程式人生 > >微服務Springcloud超詳細教程+實戰(八)

微服務Springcloud超詳細教程+實戰(八)

本人正在找深圳Java實習工作,求大佬帶飛 QQ:1172796094
如在文件中遇到什麼問題請聯絡作者
——————————————————————————————————————

消費者從Eureka獲取服務

接下來我們修改consumer-demo,嘗試從EurekaServer獲取服務。

方法與消費者類似,只需要在專案中新增EurekaClient依賴,就可以通過服務名稱來獲取資訊了!

1)新增依賴:

先新增SpringCloud依賴:

<!-- SpringCloud的依賴 -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<!-- Spring的倉庫地址 -->
<repositories>
    <repository>
        <id>spring-milestones</id>
        <name>Spring Milestones</name>
        <url>https://repo.spring.io/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

然後是Eureka客戶端:

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

2)在啟動類開啟Eureka客戶端

@SpringBootApplication
@EnableDiscoveryClient // 開啟Eureka客戶端
public class UserConsumerDemoApplication {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(UserConsumerDemoApplication.class, args);
    }
}

3)修改配置:

server:
  port: 8080
spring:
  application:
    name: user-consumer # 應用名稱
eureka:
  client:
    service-url: # EurekaServer地址
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true # 當其它服務獲取地址時提供ip而不是hostname
    ip-address: 127.0.0.1 # 指定自己的ip資訊,不指定的話會自己尋找

4)修改user-consumer-demo專案中的UserDao程式碼,用DiscoveryClient類的方法,根據服務名稱,獲取服務例項:
在這裡插入圖片描述

 // 必須匯入org.springframework.cloud.client.discovery.DiscoveryClient
    @Autowired
    private DiscoveryClient discoveryClient;


    public User queryUserById(Long id){
        //1、 根據user-service獲取user-serivce 的叢集的資訊
        List<ServiceInstance> instances = discoveryClient.getInstances("user-service");
        //2、由於我們沒有叢集,只有一個,所以直接取出第一個
        ServiceInstance instance = instances.get(0);
        //3、拼接URL
        String url = "http://"+instance.getHost()+":"+instance.getPort()+"/user/"+id;

        // 使用restTemplate發起請求
        ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class);
        // 獲取返回物件
        User user = entity.getBody();
        return user;
    }

5)Debug跟蹤執行:
在這裡插入圖片描述
生成的URL:
在這裡插入圖片描述
訪問結果:
在這裡插入圖片描述
ok!