Dubbo-基礎應用

隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進,Dubbo應運而生。

架構

這裏寫圖片描述
上圖爲dubbo結合註冊中心的架構(也有單點模式),服務提供方(Provider)將所有的服務註冊到註冊中心(Registry),服務消費方(Consumer)通過訪問註冊中心取得可用的服務列表,然後調用服務。

後臺管理部署

源碼下載

https://github.com/alibaba/dubbo

控制檯部署

Dubbo是一個多模塊的maven項目,其中dubbo-admin是控制檯。
- 修改dubbo-admin模塊下的dubbo.properties的配置,如

dubbo.registry.address=zookeeper://xxx.xxx.xxx.xxx:2181;zookeeper://xxx.xxx.xxx.xxx:2182;zookeeper://xxx.xxx.xxx.xxx:2183
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
  • 部署到web容器,啓動即可
    這裏寫圖片描述

實現簡單dubbo服務

分別建立三個模塊

<modules>
    <module>dubbo-api</module>
    <module>dubbo-provider</module>
    <module>dubbo-consumer</module>
</modules>

dubbo-api

  • 定義接口
public interface IHelloWorldService {

    public String sayHello(String name);
}
  • pom配置
<artifactId>dubbo-api</artifactId>

dubbo-provider

  • pom配置
<dependencies>
        <dependency>
            <groupId>com.bdong</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- http://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
  • 實現接口
public class HelloWorldServiceImpl implements IHelloWorldService {

    public String sayHello(String name) {
        return "Hello World : "+ name;
    }
}
  • 配置文件
<?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"
       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">

    <!--服務提供者名稱-->
    <dubbo:application name="hello-world-provider"/>
    <!--註冊中心-->
    <dubbo:registry address="xxx.xxx.xxx.xxx:2181" protocol="zookeeper"/>
    <!--&lt;!&ndash;不使用註冊中心&ndash;&gt;-->
    <!--<dubbo:registry address="N/A"/>-->
    <!--協議-->
    <dubbo:protocol name="dubbo" port="20881"/>
    <!--發佈服務-->
    <dubbo:service interface="com.bdong.dubbo.api.IHelloWorldService" ref="demoService" protocol="dubbo"/>

    <bean id="demoService" class="com.bdong.dubbo.provider.HelloWorldServiceImpl"/>

</beans>
  • 啓動服務
public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"provider.xml"});
        context.start();
        //保持服務可用
        System.in.read();
    }

dubbo-consumer

  • pom配置同dubbo-provider
  • 配置文件
<!--服務消費者名稱-->
    <dubbo:application name="hello-world-provider"/>
    <!--註冊中心-->
    <dubbo:registry address="xxx.xxx.xxx.xxx:2181" protocol="zookeeper"/>
    <!--&lt;!&ndash;不使用註冊中心&ndash;&gt;-->
    <!--<dubbo:registry address="N/A"/>-->
    <!--協議-->
    <dubbo:protocol name="dubbo" port="20881"/>
    <!--引用服務-->
    <dubbo:reference interface="com.bdong.dubbo.api.IHelloWorldService" id="demoService" protocol="dubbo"/>
  • 調用
public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"consumer.xml"});
        IHelloWorldService helloWorldService = (IHelloWorldService) context.getBean("demoService");
        System.out.println(helloWorldService.sayHello("man!"));
    }
  • 結果
Hello World : man!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章