1. 程式人生 > >## SpringBoot Dubbo Zookeeper 實現遠端呼叫

## SpringBoot Dubbo Zookeeper 實現遠端呼叫

首先我們來了解dubbo+zookeeper是個什麼東西吧? Dubbo是 阿里巴巴公司開源的一個高效能優秀的服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。 ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,它是叢集的管理者,監視著叢集中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

工作原理: 基本原理 Provider 暴露服務方稱之為“服務提供者”。 Consumer 呼叫遠端服務方稱之為“服務消費者”。 Registry 服務註冊與發現的中心目錄服務稱之為“服務註冊中心”。 Monitor 統計服務的呼叫次數和呼叫時間的日誌服務稱之為“服務監控中心”。 zookeeper 即為註冊中心

來看看程式碼實現吧! pom.xml()

<!--dubbo-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>io.netty</groupId>
                    <artifactId>netty</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.1</version>
        </dependency>

API包地址和程式碼(我這裡是本地模組,勿copy):

		<dependency>
            <groupId>com.tom</groupId>
            <artifactId>console-api</artifactId>
            <version>1.0.0</version>
        </dependency>
        提供介面即可
		public interface InterfaceDubbo {
		    HashMap<String,Object> DubboService(HashMap<String, Object> params);
		}

接下來看看dubbo.xml配置(貼在一個配置裡,消費者和服務提供者區分即可): 備註一點,如服務提供商規定版本號,消費者也需要相應的加上版本號,本文沒加,預設版本是1.0.0

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 定義應用名稱 -->
	<dubbo:application name="console-dubbo-service" />
	<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" file=".registryCache" timeout="60000"/>
	<dubbo:protocol name="dubbo" port="9999"  />
	
	<!-- 服務提供者-->
    <bean id="helloDubbo" class="com.tom.dubbo.service.HelloDubbo"/>
    <dubbo:service interface="com.tom.dubbo.InterFace.InterfaceDubbo" ref="helloDubbo" protocol="dubbo" retries="0"/>
 	<!-- 服務消費者-->
    <dubbo:annotation package="com.tom.dubbo_interface"  />
	<dubbo:protocol name="dubbo" port="9999"  />
    <dubbo:reference id="dubboService" interface="com.tom.Interface.InterfaceDubbo"  check="false" />
</beans>

消費者直接使用註解即可:

@Autowired
@Qualifier("dubboService")
InterfaceDubbo dubboService;

服務提供者程式碼如下:

public class HelloDubbo implements InterfaceDubbo {
    Logger LOG = LoggerFactory.getLogger(HelloDubbo.class);
    @Override
    public HashMap<String, Object> DubboService(HashMap<String, Object> params) {
        LOG.info("dubbo服務接收引數:{}",params);
        HashMap<String, Object> resMap = new HashMap<String, Object>();
        if(params.size() <= 0){
            resMap.put("code","SUCCESS");
            resMap.put("msg","dubbo服務連線成功,但沒有任何內容");
            return resMap;
        }
        return params;
    }
}

最後 消費者dubboService.DubboService(params)即可完成通訊。

本章完,不知道各位技友有沒有學到了。