1. 程式人生 > >第一個Ribbon程式Cannot access com.netflix.client.ClientFactory 編譯報錯

第一個Ribbon程式Cannot access com.netflix.client.ClientFactory 編譯報錯

開發工具:idea 2018.2
 


pom.xml

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

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hhj.king</groupId>
    <artifactId>first-ribbon-client</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>com.netflix.ribbon</groupId>
			<artifactId>ribbon</artifactId>
			<version>2.2.2</version>
		</dependency>
		<dependency>
			<groupId>com.netflix.ribbon</groupId>
			<artifactId>ribbon-httpclient</artifactId>
			<version>2.2.2</version>
		</dependency>
	</dependencies>
</project>

 TestRestClient .java

package com.hhj.king;

import com.netflix.client.ClientFactory;
import com.netflix.client.http.HttpRequest;
import com.netflix.client.http.HttpResponse;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.BaseLoadBalancer;
import com.netflix.niws.client.http.RestClient;

public class TestRestClient {

	public static void main(String[] args) throws Exception {
		// 設定請求的伺服器
		ConfigurationManager.getConfigInstance().setProperty(
				"my-client.ribbon.listOfServers",
				"localhost:8080,localhost:8081");
		// 獲取REST請求客戶端
		RestClient client = (RestClient) ClientFactory
				.getNamedClient("my-client");
		// 建立請求例項
		HttpRequest request = HttpRequest.newBuilder().uri("/person/1").build();
		// 發 送10次請求到伺服器中
		for (int i = 0; i < 6; i++) {
			HttpResponse response = client.executeWithLoadBalancer(request);
			String result = response.getEntity(String.class);
			System.out.println(result);
		}
	}
}

應該是缺少包的問題.解決方案:
改成如下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">


    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hhj.king</groupId>
    <artifactId>first-ribbon-client</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <ribbon.version>2.2.2</ribbon.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon</artifactId>
            <version>${ribbon.version}</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon-httpclient</artifactId>
            <version>${ribbon.version}</version>
        </dependency>
        <!-- 新增下列jar包 防止編譯報錯 -->
        <dependency>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon-loadbalancer</artifactId>
            <version>${ribbon.version}</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon-core</artifactId>
            <version>${ribbon.version}</version>
        </dependency>

        <dependency>
            <groupId>com.netflix.archaius</groupId>
            <artifactId>archaius-core</artifactId>
            <version>0.7.4</version>
        </dependency>

        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>1.10</version>
        </dependency>

         <!--防止執行時 NoClassDefFoundError: com/google/common/reflect/TypeToken-->
        <dependency>
            <groupId>com.ecwid</groupId>
            <artifactId>ecwid-mailchimp</artifactId>
            <version>2.0.1.0</version>
        </dependency>

        <!-- 新增jar包 防止編譯報錯  end -->
    </dependencies>
</project>