1. 程式人生 > >SpringCloud-服務消費者(Ribbon)

SpringCloud-服務消費者(Ribbon)

1、POM

<parent>
        <groupId>com.xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>xxx-webapi</artifactId>
    <name>xxx-webapi</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>com.xxx</groupId>
            <artifactId>xxx-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- json start -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.15</version>
        </dependency>

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.3</version>
            <classifier>jdk15</classifier>
        </dependency>

        <!-- gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <!-- json end -->

        <!-- ribbon消費者springcloud jar start -->
        <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.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- ribbon消費者springcloud jar end -->

    </dependencies>

    <build>
        <finalName>xxx-webapi</finalName>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、啟動類

@SpringBootApplication
@EnableDiscoveryClient
public class WebApiApplication {
    
    private static final Logger log = LoggerFactory.getLogger(WebApiApplication.class);
    
    public static void main(String[] args) {
        log.info("**********介面中心啟動-開始**********");
        try {
            SpringApplication.run(WebApiApplication.class, args);
            log.info("**********介面中心啟動-成功**********");
        }
        catch (Throwable e) {
            log.info("**********介面中心啟動-失敗**********");
        }
    }
    
    @Bean//向程式的ioc注入一個bean
    @LoadBalanced//表明這個restRemplate開啟負載均衡的功能
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
}

3、配置

#專案系統配置start
#預設埠
server.port=9002
#系統服務名稱
spring.application.name=xxx-webapi
#註冊中心
eureka.client.serviceUrl.defaultZone=http://admin:[email protected]:9502/eureka/
#表示是否將自己註冊到Eureka Server
eureka.client.registerWithEureka=false
#表示是否從Eureka Server獲取註冊資訊
eureka.client.fetchRegistry=true

#服務呼叫超時
#請求處理的超時時間(預設5s)
ribbon.ReadTimeout=5000
#請求連線的超時時間(預設2s)
ribbon.ConnectTimeout=2000
#對所有操作請求都進行重試
hello-service.ribbon.OkToRetryOnAllOperations=false
#對當前例項的重試次數
ribbon.MaxAutoRetries=0
#切換例項的重試次數
ribbon.MaxAutoRetriesNextServer=0

#LOG
logging.file=./logs/log.log
#日誌級別
logging.level.org.springframework=DEBUG

#專案系統配置end

#服務地址列表start*********************************
#銀行卡認證服務
auth.url=http://xxx-provider/bankcard/auth


#服務地址列表end*********************************


#系統常量配置start*********************************

#系統常量配置end*********************************

4、demo

@RestController
@RequestMapping("/user")
public class UserController {
    
    private static final Logger log = LoggerFactory.getLogger(UserController.class);
    
    @Autowired
    private RibbonCommonService ribbonCommonService;
    @Value("${auth.url}")
    private String authUrl;
    
    @RequestMapping(value = "/auth", method = RequestMethod.POST)
    public Object bankCardFourElementAuth(HttpServletRequest request,@RequestParam Map<String, Object> map) {
       xxxResVo resVo = new xxxResVo();
        log.info("介面請求引數:{}", map);
        try {
            //......
            String result = ribbonCommonService.ribbonPost(reqVo, authUrl);
            log.info("銀行卡四要素認證請求返回資訊:{}", result);
           //......
        }
        catch (Throwable e) {
            log.error("xxxxxx系統異常", e);
          //......
        }
        log.info("銀行卡四要素認證介面返回資訊:{}", resVo);
        return resVo;
    }
}

public interface RibbonCommonService {
    
    /**
     * ribbon-post請求服務方式(baseReqVo)
     *
     * @version 2018年1月4日下午12:43:58
     * @author wuliu
     * @param params
     * @param url
     * @return
     */
    public String ribbonPost(BaseReqVo baseReqVo, String url);
    
    /**
     * ribbon-post請求服務方式(map)
     *
     * @version 2018年1月4日下午12:43:58
     * @author wuliu
     * @param params
     * @param url
     * @return
     */
    public String ribbonPost(Map<String,Object> params, String url);
}

@Service
public class RibbonCommonServiceImpl implements RibbonCommonService{
    
    @Autowired
    private RestTemplate restTemplate;
    
    @Override
    public String ribbonPost(BaseReqVo baseReqVo, String url) {
        HttpHeaders headers = new HttpHeaders();
        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.set("Connection", "Close");
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        JSONObject jsonObj = JSONObject.fromObject(baseReqVo);
        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
        String result = restTemplate.postForObject(url, formEntity, String.class);
        return result;
    }
    
    @Override
    public String ribbonPost(Map<String, Object> params, String url) {
        HttpHeaders headers = new HttpHeaders();
        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.set("Connection", "Close");
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        JSONObject jsonObj = JSONObject.fromObject(params);
        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
        String result = restTemplate.postForObject(url, formEntity, String.class);
        return result;
    }

}


相關推薦

SpringCloud-服務消費者(Ribbon)

1、POM <parent>         <groupId>com.xxx</groupId>         <artifactId>xxx</artifactId>         <version&

SpringCloud 服務消費者-rest+ribbon

spring cloud有兩種服務呼叫方式,一種是ribbon+restTemplate,另一種是feign. ribbon ribbon是一個負載均衡客戶端,Feign預設集成了ribbon。ribbon已經預設實現瞭如下配置bean: (1) IClientConfig ribbon

springCloud-netflix-Eureka服務消費者(ribbon+restTemplat)

在上一篇文章,講了服務的註冊和發現。在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基於http restful的。Spring cloud有兩種服務呼叫方式,一種是ribbon+restTemplate,另一種是feign。在這一篇文章首先講解下基於ribbon+

SpringCloud服務學習3-服務消費者ribbon

    我們上一節, 已經學習瞭如何使用LoadBanncerClient來獲取服務的具體資訊, 然後根據獲取具體的資訊呼叫服務的提供的介面,這樣需要我們去手動拼接, 這樣比較繁瑣,對於開發人員來說非常的不友好, 所以今天我們來看一下springCloud對於對於客戶端的負載

SpringCloud框架服務消費者-Ribbon

上文我們建立了註冊中心,以及服務的提供者microservice-provider-user,併成功 地將服務提供者註冊到了註冊中心上。 要想消費microservice-provider-user的服務是很簡單的,我們只需要使用 RestTemplate即可,或者例如HttpClien

springcloud 服務消費者 - Feign

簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign只需要建立一個介面並添加註解,可以使用Feign註解和JAX-RS註解。Feign預設集成了Ribbon,並和Eureka結合。 實踐 1、啟動eureka-server,埠為8761.啟動s

springcloud 服務消費者(Feign)錯誤集錦

【前言】 最近在看方誌朋的spingcloud教程,把我遇到的錯誤分享給大家。 【過程】 按照方老師的教程一步步的往下進行之後遇到的第一個錯誤就是@EnableFeignClients註解無法識別,多方查閱部落格 ,大部分人給出的建議都是在pom檔案中新增如下資訊:

springcloud 服務消費者

簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign只需要建立一個介面並添加註解,可以使用Feign註解和JAX-RS註解。Feign預設集成了Ribbon,並和Eureka結合。 實踐 1、啟動eureka-server,埠

SpringCloud服務消費者第一次調用出現超時問題的解決方案

https://www.cnblogs.com/yangzhilong/p/6770359.html 在第一次訪問服務消費者的時候(消費者去呼叫服務提供者服務)會出現如下異常: com.netflix.hystrix.exception.HystrixRuntimeException: Te

SpringCloud 服務消費者Feign

個人學習SpringCloud系列 Feign篇 Github Link: https://github.com/panjianlong13/SpringBoot-SpringCloud/tree/master/spring-cloud-feign Feign介紹 Feign是一種宣

SpringCloud--服務消費者(Feign)

一、Feign簡介 Feign是一個宣告式的web服務客戶端,它使得寫web服務變得更簡單。使用Feign,只需要建立一個介面並註解。它具有可插拔的註解特性,包括Feign 註解和JAX-RS註解。Feign同時支援可插拔的編碼器和解碼器。spring cloud對Sp

SpringCloud 服務消費者(Feign)(Finchley版本)(三)

上一篇文章,講述瞭如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。 一、Feign簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。它

Eureka客戶端-服務消費者(Ribbon+Hystrix)

1、pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.ou

Eureka客戶端-服務消費者(Ribbon)

1、pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-s

springcloud服務消費者使用foeign,不識別@EnableFeignClients 註解解決辦法

版本: 我使用的是springboot版本2.0,springcloud版本為Finchley.M8 springcloud依賴管理,用於管理spring-cloud的依賴版本統一 所有在

SpringCloud: 服務消費者(Feign)

上一篇文章,講述瞭如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。 Feign簡介 Feign是一個宣告式的偽Http客戶端,它使得寫Http客戶端變得更簡單。使用Feign,只需要建立一個介面並註解。

SpringCloud--服務消費者使用RestTemplate呼叫服務報錯解決方案

xl_echo編輯整理,歡迎轉載,轉載請宣告文章來源。更多IT程式設計案例、資料請聯絡QQ:1280023003 ,群:298140694 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 開發工具 版本

SpringCloud--服務消費者RestTemplate開啟斷路器(Hystrix)

xl_echo編輯整理,歡迎轉載,轉載請宣告文章來源。更多IT程式設計案例、資料請聯絡QQ:1280023003 ,群:298140694 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 斷路器是我們單間一整套微服務中的一

springcloud服務消費者ribbon

serve frame ribbon lee cti 代碼 images net 發現 本章介紹springcloud中的服務消費者   springcloud服務調用方式有兩種實現方式:     1,restTemplate+ribbon,     2,feign  

史上最簡單的SpringCloud教程 | 第二篇: 服務消費者(rest+ribbon

image tree 開啟 then rom cat learn 替代 官網 最新Finchley版本:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f2-ribbon/或者http://blog.csdn.n