dubbo示例

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。java

我也不明白這是什麼意思,使用了以後大概就是提供一個將多個項目進行聯合的一種分佈式,使用的是一種長連接的方法,具體沒有深刻研究,只是試用了一下。git

 

其核心部分包含:github

  • 遠程通信: 提供對多種基於長鏈接的NIO框架抽象封裝,包括多種線程模型,序列化,以及「請求-響應」模式的信息交換方式。(具體應該是一種長鏈接的方式,因此速度較快)
  • 集羣容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。(使用dubbo,通常會使用zookeeper來作集羣)
  • 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方能夠平滑增長或減小機器。(統一的註冊中心,若是註冊中心掛掉了,已經註冊的會存在於緩存中,不會斷掉。)

Dubbo能作什麼?

  • 透明化的遠程方法調用,就像調用本地方法同樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,下降成本,減小單點。
  • 服務自動註冊與發現,再也不須要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,而且可以平滑添加或刪除服務提供者。

另外dubbo進行了與spring的徹底融合,因此能夠直接經過spring的xml文件進行配置,至於怎麼與spring-boot整合,還不知道。spring

 

上實現:apache

1.首先須要一個zookeeper;具體用法請百度。緩存

 

2.啓動zookeeper,以這個服務做爲註冊中心服務器

 

3.生產者,首先引入zookeeper的jarapp

<!-- zookeeper -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>jmxtools</artifactId>
                    <groupId>com.sun.jdmk</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jmxri</artifactId>
                    <groupId>com.sun.jmx</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jms</artifactId>
                    <groupId>javax.jms</groupId>
                </exclusion>
            </exclusions>
        </dependency>

而後是dubbo負載均衡

    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.4.9</version>
            <scope>compile</scope>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

別忘了還有spring的,這裏就不貼了框架

3.1:

      首先定義一個接口,用來發布的:

public interface ProvideService {

    public String sayHello(String name);
}

進行實現:

@Service(value = "provideService")
public class ProvideServiceImpl implements ProvideService {

    public String sayHello(String name){
        System.out.println ("ProvideServiceImpl  sayHello 走到了");
        return name + " say Hello";
    }

}

而後是最關鍵的spring 配置dubbo

applicationContext.xml

    <!-- 啓動spring註解掃描 -->
    <context:annotation-config /> 

    <context:component-scan base-package="com.dubbo.*" />

    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:application name="lclc_provider" />


    <!-- 使用zookeeper註冊中心暴露服務地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 

    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- 聲明須要暴露的服務接口 -->
    <dubbo:service interface="com.dubbo.ProvideService"
        ref="provideService" />

啓動spring便可

 public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext ("applicationContext.xml");
        context.start ();
        try {
            System.in.read ();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace ();
        }// 按任意鍵退出
    }

4.而後是消費者

引入的jar包與生產者同樣,可是須要多加一個,即生產者方提供的接口,由於是經過接口進行代理的

4.1:消費

  public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext ("applicationContext.xml");

        context.start ();

        ProvideService demoService = (ProvideService) context.getBean ("ProvideService");// 獲取遠程服務代理

        String hello = demoService.sayHello ("lclc");// 執行遠程方法

        System.err.println (hello);// 顯示調用結果
    }

application.xml

<!-- 啓動spring註解掃描 -->
    <context:annotation-config /> 

    <context:component-scan base-package="com.dubbo.*" />

    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:application name="lclc_consumer" />

    <!-- 使用zookeeper註冊中心暴露服務地址 -->
     <dubbo:registry address="zookeeper://127.0.0.1:2181" />

    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <dubbo:reference id="ProvideService"  interface="com.dubbo.ProvideService" />

 

請注意:生產者與消費者是兩個項目,是部署在兩個服務器上的,經過dubbo進行連接起來,消費者調用生產者的接口就像調用本地同樣。

相關文章
相關標籤/搜索