javascript
SpringCloud Ribbon实战(二)
接著上一篇我們了解了Ribbon的客戶端的負載均衡器
接下來我看下如何使用做到負載均衡,話不多說直接上開始吧
我們創建一個客戶端的消費者微服務工程: microservicecloud-consumer-dept-80
怎么創建包和啟動類我這里就不講了
下面我們就直接上代碼了需要pom.xml添加相關的依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>microservicecloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>microservicecloud-consumer-dept-80</artifactId><description>部門微服務消費者</description><dependencies><dependency><!-- 自己定義的api --><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><!-- Ribbon相關 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 修改后立即生效,熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--fork : 如果沒有該項配置,可能這個devtools不會起作用,即應用不會restart--><fork>true</fork></configuration></plugin></plugins></build> </project>關于其他的依賴我這里不多做介紹,關鍵這里是引入ribbon客戶端的負載均衡依賴
?
yml配置文件:
server:port: 80eureka:client:register-with-eureka: false #自己不能注冊自己service-url:#defaultZone: http://localhost:7001/eureka/ #單機版defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #eureka集群java代碼結構:
對ConfigBean配置類加@LoadBalanced新注解,獲得RestTemplate調用微服務的對象,RestTemplate對象給加入ribbon負載均衡
package com.atguigu.springcloud.cfgbeans;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate;@Configuration public class ConfigBean {@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();} }主啟動類添加新注解@EnableEurekaClient:
package com.atguigu.springcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication @EnableEurekaClient //在啟動該微服務的時候就能去加載我們的自定義Ribbon配置類,從而使配置生效 //@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class) //@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class) public class DeptConsumer80_App {public static void main(String[] args) {SpringApplication.run(DeptConsumer80_App.class, args);} }修改客戶端的訪問類(還記得之前講的微服務的生產提供者嗎
由此我們需要將這個訪問微服務的地址配置成:
? private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
):
package com.atguigu.springcloud.controller;import com.atguigu.springcloud.entities.Dept; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;import java.util.List;@RestController @RequestMapping("/consumer") public class DeptController_Consumer {//private static final String REST_URL_PREFIX = "http://localhost:8001";private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";/*** 使用restTemplate訪問restful接口非常的簡單粗暴無腦。 (url, requestMap,* ResponseBean.class)這三個參數分別代表 REST請求地址、請求參數、HTTP響應轉換被轉換成的對象類型。*/@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/dept/add")public boolean add(Dept dept) {return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);}@RequestMapping(value = "/dept/get/{id}")public Dept get(@PathVariable("id") Long id) {return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);} //@RequestMapping(value = "/dept/get/{id}", method= RequestMethod.GET)//@GetMapping("/dept/get/{id}")/*public Dept getDeptById(@RequestParam(value="id",required = false,defaultValue = "1") Long id) {Dept dept=restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/"+id , Dept.class);return dept;}*/@SuppressWarnings("unchecked")@RequestMapping(value = "/dept/list")public List<Dept> list(){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);}// 測試@EnableDiscoveryClient,消費端可以調用服務發現@RequestMapping(value = "/dept/discovery")public Object discovery(){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/discovery", Object.class);}}這樣就完成了負載均衡代碼的搭建,下面我就來測試一下吧
1,首先啟動eureka集群,如果不懂eureka集群請參考學習這篇文章,這里就不多說了
2,啟動微服務提供者,如果不懂微服務提供者實現請參考https://blog.csdn.net/ywl470812087/article/details/102535582
3,啟動客戶端消費者
我們的服務已經啟動完成下面我們就可以完成測試了
訪問:http://localhost/consumer/dept/get/1
訪問eureka注冊中心:http://eureka7003.com:7003/? ?和???http://eureka7002.com:7002/? 以及??http://eureka7001.com:7001/
總結:這樣我們就說明我們的消費者端已經成功,不用再通過ip和端口去調用微服務,只需要通過微服務名就可以實現調用
?
?
?
總結
以上是生活随笔為你收集整理的SpringCloud Ribbon实战(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS:js 数组赋值问题 :值传递还是引
- 下一篇: JS:js中的复制对象值问题——Obje