如何開發基於Dubbo RPC的分布式服務?


  • 什么是Dubbo?
    • Dubbo能做什么?
  • 在Crystal框架下,如何開發基於Dubbo RPC的服務?
  • 在Crystal框架下,如何調用Dubbo RPC服務?
  • 相關的文章

 

什么是Dubbo?

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

其核心部分包含:

  • 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
  • 集群容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
  • 自動發現: 基於注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

Dubbo能做什么?

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

想了解跟多關於Dubbo的信息,請查看:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm

在Crystal框架下,如何開發基於Dubbo RPC的服務?

第一步:定義接口

  1. 創建接口Jar項目,如:test-dubbo-service-api;
  2. 創建接口類和接口方法,和通常的接口定義沒有什么區別,如:

    public interface TestService {
        /**
         *
         * @param a
         * @return
         */
        public String test(String a);
    }

第二步:實現並發布服務

  1. 創建服務實現項目,如:test-dubbo-service-impl;
  2. 引入接口項目(test-dubbo-service-api)、Crystal框架dubbo服務支持包(crystal-remote-server-dubbo),如:

    <dependency>
        <groupId>com.gsoft.test</groupId>
        <artifactId>test-dubbo-service-api</artifactId>
    </dependency>
    <dependency>
        <groupId>com.gsoft.crystal</groupId>
        <artifactId>crystal-remote-server-dubbo</artifactId>
    </dependency>
  3. 實現服務接口,如:

    @Service
    public class TestServiceImpl implements TestService {
        @Value("${crystal.application.name}")
        private String name;
        /*
         * (non-Javadoc)
         *
         * @see com.gsoft.test.dubbo.TestService#test(java.lang.String)
         */
        @Override
        public String test(String a) {
            return "Hello, " + a + "! " + " I'm " + name + " " + System.getenv("LOGONSERVER") + ".";
        }
    }
  4. 在實現類上添加注解@Service,此處Service為dubbo服務的聲明注解com.alibaba.dubbo.config.annotation.Service,到此,基於Dubbo發布的服務已經開發並發布完成。

    Icon
    Crystal框架封裝並提供了Dubbo的默認配置,因此開發Dubbo服務非常簡單。 當需要調整配置時,可根據Crystal框架參數加載順序,采用項目中profile/config.properties文件中參數,調整配置,如下:
    
    crystal.application.name = crystal_framework
    
    crystal.application.owner = Crystal
    
    dubbo.registry.address = zookeeper://127.0.0.1:2181
    
    dubbo.protocol.port = 20880

在Crystal框架下,如何調用Dubbo RPC服務?

第一步:項目中引用Dubbo服務接口包和Crystal框架dubbo客戶端支持包(crystal-remote-client-dubbo),如

<dependency>
    <groupId>com.gsoft.test</groupId>
    <artifactId>test-dubbo-service-api</artifactId>
</dependency>
<dependency>
    <groupId>com.gsoft.crystal</groupId>
    <artifactId>crystal-remote-client-dubbo</artifactId>
</dependency>

第二步:在需要使用Dubbo RPC服務的類中,添加服務的引用,並添加@Reference注解:(此處Reference為dubbo服務的聲明注解com.alibaba.dubbo.config.annotation.Reference

public class TestCostumer {
    @Reference
    private TestService s;
    private int i = 0;
    @Value("${crystal.application.name}")
    private String name;
    public void hello() {
        System.out.println(s.test(name + " " + System.getenv("LOGONSERVER") + "-" + ++i));
    }
}

 

Crystal框架封裝並提供了Dubbo的默認配置,因此開發Dubbo服務非常簡單。 當需要調整配置時,可根據Crystal框架參數加載順序,采用項目中profile/config.properties文件中參數,調整配置,如下:

crystal.application.name = crystal_framework

crystal.application.owner = Crystal

dubbo.registry.address = zookeeper://127.0.0.1:2181


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM