微服務Springcloud超詳細教程+實戰(八)
阿新 • • 發佈:2018-12-14
本人正在找深圳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!