Dubbo服務環境搭建以及Dubbo服務的提供者和消費者配置詳解

原文路徑:http://blog.csdn.net/xinluqishi123/article/details/64124503

項目中引入了Dubbo,對外需要提供一個Dubbo的接口服務,編寫了一個demo,在此提供出來,供初學者引用。 

主要包括:在spring項目中引入對dubbo的支持,編寫dubbo的provider和consumer,提供一個可測試的小demo。

目標:開發環境中添加對Dubbo的支持,編寫Dubbo服務的提供者和消費者。

環境:Spring4.0, Dubbo2.5.3, Zookeeper3.4.6,maven3.3.9

步驟:

  1. 獨立建立一個java maven項目,將所有的dubbo服務接口,這裏只是接口以及包含的接口方法放置其中。 
    類似如下的結構: 
    這裏寫圖片描述
    app包下放置的就是你自己定義的dubbo接口和接口方法,這裏我寫的一個接口如下:
package yourpackage.app;

/**
 * 對外提供發送短信的Dubbo服務
 * @author kevin shi
 *
 */

public interface ISendMessageService {

    void sendMessage(int serialNo, String destAddr_cmcc, String messageContent);

}

我這裏寫了一個發送短息的dubbo服務,可以調用這個接口發送短信,可以把短信內容,發送目標等等作爲參數傳遞進來。單獨建立一個項目存放接口是爲了開發provider和consumer的時候可以方便以jar包的形式調用,因爲你的provider或者consumer也許是在單獨的項目中,而且也可能是不同的人編寫。 
你可以將這個項目導出jar包,並上傳到你的私服上供其他的項目開發者下載依賴引用。

  1. 編寫Dubbo服務的provider: 
    首先,在項目中加入對Dubbo服務的依賴支持:
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
        </dependency>

        <dependency>
          <groupId>yourpackage.common</groupId>
          <artifactId>dubbo-common</artifactId>
          <version>0.0.1-SNAPSHOT</version>
        </dependency>dubbo和spring融合的依賴引用,zookeeper和client都配置在這裏了,client也許不需要,但是我都配置上了,最後一個是對步驟1中編寫的dubbo-common項目的jar包依賴。
其次,編寫xml配置文件,可以叫做spring-dubbo-provider.xml,配置你的Dubbo服務的provider,因爲有了接口你還需要寫實現類實現這個接口服務提供給consumer:
<!-- 註冊dubbo服務的應用名稱。 -->
<dubbo:application name="dubbo_provider" />
<!-- 此處配置zookeeper註冊中心的服務地址 -->
<dubbo:registry address="zookeeper://10.11.12.13:1001"  check="false"/>
<!-- Dubbo服務提供者的服務地址和端口號 -->
<dubbo:protocol host="127.0.0.1"  name="dubbo" port="20891"></dubbo:protocol>
<!-- 此處配置服務提供者的接口實現類,yourpackage.ISendMessageService是Dubbo服務的接口路徑,sendMessageService是引用的接口實現類bean的名稱。 -->
<dubbo:service interface="yourpackage.ISendMessageService" ref="sendMessageService" timeout="1200000" 
最後,編寫Dubbo服務提供者的接口實現類:
    package yourpackage.common.service.impl;

    import org.springframework.stereotype.Service;

    import yourpackage.ISendMessageService;
    import yourpackage.common.utils.SMSUtil;

    @Service("sendMessageService")
    public class SendMessageServiceImpl implements ISendMessageService{

        @Override
        public void sendMessage(int serialNo, String destAddr_cmcc, String messageContent) {
            SMSUtil.send(serialNo, destAddr_cmcc, messageContent);
        }
    }編寫Dubbo服務consumer 
  1. 首先,編寫xml配置文件,可以叫做spring-dubbo-consumer.xml,(pom文件中依賴的引用參考provider的配置), 
    消費端應該與服務提供端處於不同的項目中,在一個項目中只能提供一個,否則會報錯,但是可以配置多個接口。
    <dubbo:application name="dubbo_consumer" />
    <dubbo:registry  protocol="zookeeper"  address="zookeeper://10.11.12.13:1001" />
    <dubbo:reference interface="yourpackage.ISendMessageService" id="sendMessageServiceConsumer" url="dubbo://127.0.0.1:20891" timeout="1200000" />消費端的應用名稱應該與服務提供端的應用名稱不同,這裏是“dubbo_consumer”; 

註冊的zookeeper地址名稱與服務提供端相同; 
標籤配置的是dubbo服務接口名稱;聲明這個接口對應的引用beanID是“sendMessageServiceConsumer”,在消費端調用這個接口時可以直接獲取這個名字;url對應dubbo provider自己聲明的服務地址,也就是對應標籤的內容; 
注意此處的timeout必須填寫,否則會造成客戶端連接很快過期而無法調用dubbo服務的情況。

其次,編寫consumer的調用代碼(此處簡單調用):

    package yourpackage.common.service;

    import org.springframework.context.support.ClassPathXmlApplicationContext;

    import yourpackage.ISendMessageService;

    public class SendMessageServiceConsumerImpl {

        public static void handleSendMessage() {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-dubbo-consumer.xml" });  
            context.start();  
            ISendMessageService sendService = (ISendMessageService) context.getBean("sendMessageServiceConsumer");  //這裏對應配置文件中聲明的beanId
            sendService.sendMessage(12345, "2222222", "3333333");
        }

        public static void main(String[] args) {
            SendMessageServiceConsumerImpl.handleSendMessage();
        }
    }ok,一切就緒,我們可以在藉助tomcat啓動Dubbo服務的provider後,運行consumer的main函數,即可調用到provider的接口實現類,從而可以進行後續功能擴展和測試。

謝謝你能看到這裏,如有錯誤請批評指正,也可以給我留言談到其他問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章