最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring boot2X Consul如何通過(guò)RestTemplate實(shí)現(xiàn)服務(wù)調(diào)用

 更新時(shí)間:2019年12月02日 09:25:15   作者:慕塵  
這篇文章主要介紹了spring boot2X Consul如何通過(guò)RestTemplate實(shí)現(xiàn)服務(wù)調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了spring boot2X Consul如何通過(guò)RestTemplate實(shí)現(xiàn)服務(wù)調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Consul可以用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置

服務(wù)調(diào)用有兩種方式:

A.使用RestTemplate 進(jìn)行服務(wù)調(diào)用

負(fù)載均衡——通過(guò)Ribbon注解RestTemplate

B.使用Feign 進(jìn)行聲明式服務(wù)調(diào)用

負(fù)載均衡——默認(rèn)使用Ribbon實(shí)現(xiàn)

先使用RestTemplate來(lái)實(shí)現(xiàn)

1.服務(wù)注冊(cè)發(fā)現(xiàn)中心

啟動(dòng)Consul

consul agent -dev

2.服務(wù)端

在spring boot2X整合Consul 的基礎(chǔ)上

添加服務(wù)provider,provider1

provider測(cè)試方法

package com.xyz.provider.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class demoController {
 @RequestMapping("/hello")
 public String Hello(){
  return "hello,provider";
 }
}

provider1測(cè)試方法

package com.xyz.provider1.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class demoController {
 @RequestMapping("/hello")
 public String Hello(){
  return "hello,another provider";
 }
}

啟動(dòng)provider和provider1

瀏覽器訪問(wèn)http://localhost:8500

有兩個(gè)服務(wù)提供者節(jié)點(diǎn)實(shí)例

3.客戶(hù)端

(1)添加依賴(lài)

<properties>
  <java.version>1.8</java.version>
  <spring-cloud.version>Greenwich.SR4</spring-cloud.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-consul-discovery</artifactId>
  </dependency>

</dependencies>

<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>

(2)添加配置

server.port=8015
spring.application.name=xyz-comsumer
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.register=false
spring.cloud.consul.discovery.health-check-url=/actuator/health
spring.cloud.consul.discovery.heartbeat.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

(3)測(cè)試方法

獲取所有注冊(cè)的服務(wù),從注冊(cè)的服務(wù)中選取一個(gè),服務(wù)調(diào)用

package com.xyz.comsumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class HelloController {
 @Autowired
 private LoadBalancerClient loadBalancer;
 @Autowired
 private DiscoveryClient discoveryClient;
 private String serviceName = "service-provider";

 @RequestMapping("/services")
 public Object services() {
  return discoveryClient.getInstances(serviceName);
 }

 @RequestMapping("/discover")
 public Object discover() {
  return loadBalancer.choose(serviceName).getUri().toString();
 }

 @RequestMapping("/hello")
 public String hello() {
  ServiceInstance serviceInstance = loadBalancer.choose(serviceName);
  String callServiceResult = new RestTemplate().getForObject(serviceInstance.getUri().toString() + "/hello", String.class);
  return callServiceResult;
 }
}

注:

客戶(hù)端調(diào)用的服務(wù)名,是在服務(wù)端指定的,在服務(wù)端配置里使用 spring.cloud.consul.discovery.service-name指注冊(cè)到 Consul 的服務(wù)名稱(chēng)

測(cè)試

啟動(dòng)Consul

啟動(dòng)provider和provider1

啟動(dòng)comsumer

測(cè)試地址 http://localhost:8015/services

返回結(jié)果

[
 {
  "instanceId": "provider-8010",
  "serviceId": "service-provider",
  "host": "hkgi-PC",
  "port": 8010,
  "secure": false,
  "metadata": {
   "secure": "false"
  },
  "uri": "http://hkgi-PC:8010",
  "scheme": null
 },
 {
  "instanceId": "provider-8011",
  "serviceId": "service-provider",
  "host": "hkgi-PC",
  "port": 8011,
  "secure": false,
  "metadata": {
   "secure": "false"
  },
  "uri": "http://hkgi-PC:8011",
  "scheme": null
 }
]

測(cè)試地址 http://localhost:8015/discover

返回結(jié)果

  •   http://hkgi-PC:8011 或 http://hkgi-PC:8011
  •   測(cè)試地址 http://localhost:8015/hello
  •   返回結(jié)果
  •   hello,provider 或 hello,another provider

注:

結(jié)果交替出現(xiàn)的,這是因?yàn)樨?fù)載均衡器是采用的是輪詢(xún)的方式

說(shuō)明:

調(diào)用的過(guò)程:

A.通過(guò)LoadBalancerClient查詢(xún)服務(wù)

B.通過(guò)RestTemplate調(diào)用遠(yuǎn)程服務(wù)

Ribbon負(fù)載均衡策略

  •   BestAvailableRule
  •   AvailabilityFilteringRule
  •   WeightedResponseTimeRule
  •   RetryRule
  •   RoundRobinRule
  •   RandomRule
  •   ZoneAvoidanceRule

自定義Ribbon負(fù)載均衡——使用隨機(jī)訪問(wèn)策略

修改啟動(dòng)類(lèi)

package com.xyz.comsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class ComsumerApplication {
 public static void main(String[] args) {
  SpringApplication.run(ComsumerApplication.class, args);
 }

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

服務(wù)調(diào)用

package com.xyz.comsumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class RibbonHelloController {
 @Autowired
 private RestTemplate restTemplate;
 private String serviceName = "service-provider";

 @RequestMapping("/ribbon/hello")
 public String hello() {
  String callServiceResult = restTemplate.getForObject("http://"+serviceName+"/hello", String.class);
  return callServiceResult;
 }
}

配置添加

service-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

重新啟動(dòng) comsumer

測(cè)試地址 http://localhost:8015/ribbon/hello

輸出的結(jié)果不再是交替出現(xiàn),改為隨機(jī)的了

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)石頭剪刀布游戲

    Java實(shí)現(xiàn)石頭剪刀布游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)石頭剪刀布游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Java 基于tcp協(xié)議實(shí)現(xiàn)文件上傳

    Java 基于tcp協(xié)議實(shí)現(xiàn)文件上傳

    這篇文章主要介紹了Java 基于tcp協(xié)議實(shí)現(xiàn)文件上傳,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java遞歸方法求5!的實(shí)現(xiàn)代碼

    Java遞歸方法求5!的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java遞歸方法求5!的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-02-02
  • Java之如何關(guān)閉流

    Java之如何關(guān)閉流

    這篇文章主要介紹了Java之如何關(guān)閉流問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 輕量級(jí)聲明式的Http庫(kù)——Feign的獨(dú)立使用

    輕量級(jí)聲明式的Http庫(kù)——Feign的獨(dú)立使用

    這篇文章主要介紹了輕量級(jí)聲明式的Http庫(kù)——Feign的使用教程,幫助大家更好的理解和學(xué)習(xí)使用feign,感興趣的朋友可以了解下
    2021-04-04
  • Java Iterator迭代器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java Iterator迭代器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    迭代器是一種模式,它可以使得對(duì)于序列類(lèi)型的數(shù)據(jù)結(jié)構(gòu)的遍歷行為與被遍歷的對(duì)象分離,接下來(lái)通過(guò)本文給大家分享Java Iterator迭代器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友參考下吧
    2017-05-05
  • Java Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn)

    Java Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn)

    本文主要介紹了Kafka分區(qū)發(fā)送及消費(fèi)實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot整合Shiro和Redis的示例代碼

    SpringBoot整合Shiro和Redis的示例代碼

    這篇文章主要介紹了SpringBoot整合Shiro和Redis的示例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • java獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法

    java獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法

    這篇文章主要給大家介紹了關(guān)于java如何獲取redis日志信息與動(dòng)態(tài)監(jiān)控信息的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息

    SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息

    在我們?nèi)粘EB開(kāi)發(fā)工作中,經(jīng)常會(huì)有需要獲取客戶(hù)端地理位置的需求,本文主要介紹了SpringBoot整合ip2region獲取客戶(hù)端IP地理位置信息,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08

最新評(píng)論

建阳市| 平山县| 巴楚县| 崇明县| 奇台县| 新平| 拉萨市| 杨浦区| 会泽县| 利川市| 大理市| 敦化市| 眉山市| 白城市| 奉新县| 中山市| 汶川县| 昌吉市| 晴隆县| 祁连县| 米脂县| 安多县| 师宗县| 佳木斯市| 三台县| 鱼台县| 惠来县| 隆尧县| 隆德县| 建水县| 驻马店市| 黄浦区| 祁东县| 文成县| 柏乡县| 阳东县| 拜泉县| 札达县| 罗城| 黎平县| 北京市|