天天看點

學習Dubbo之HelloWorldDubbo的學習之路

Dubbo的學習之路

1、開發所需工具的準備

JDK

  • 使用jdk1.8(沒有的需先行下載下傳)

zookeeper

(1)、zookeeper下載下傳連結(本項目使用的是windows版本的zookeeper-3.4.14)

(2)、zookeeper的安裝步驟:

  • 解壓 zookeeper-3.4.14.tar.gz(本人下載下傳在 E:\Java目錄下)
  • 進入到 E:\Java\zookeeper-3.4.14\conf 目錄
  • 複制一份zoo_sample.cfg檔案,再将名字改為zoo.cfg
  • 在E:\Java\zookeeper-3.4.14目錄下建立 data檔案夾和log檔案夾
  • 修改zoo.cfg檔案中的配置
    • 将dataDir對應的路徑改為E:/Java/zookeeper-3.4.14/data
    • 再新增 dataLogDir=E:/Java/zookeeper-3.4.14/log
  • 啟動zookeeper服務端
    • 進入到E:\Java\zookeeper-3.4.14\bin目錄下找到zkServer.cmd指令腳本點選即可
  • 啟動zookeeper用戶端
    • 進入到E:\Java\zookeeper-3.4.14\bin目錄下找到zkCli.cmd指令腳本點選即可
  • 驗證是否啟動成功
    • 啟動zkCli.cmd後能在指令視窗中看見Welcome to ZooKeeper!
    • 或者通過 netstat -a 進行檢視目前系統所有線程的端口,找到2181就說明啟動成功。

2、項目建立

(1)通過maven建立provider項目

<1>在provider項目的pom檔案中引入jar包

<dependencies>
        <!--使用zookeeper當注冊中心-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-configcenter-zookeeper</artifactId>
             <version>2.7.2</version>
         </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-config-spring</artifactId>
            <version>2.7.2</version>
        </dependency>
        <!--使用netty4作為容器-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-remoting-netty4</artifactId>
            <version>2.7.2</version>
         </dependency>
        <!--使用hessian2作為遠端式列化-->
         <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>2.7.2</version>
        </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
             <version>1.7.25</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-log4j12</artifactId>
             <version>1.7.25</version>
         </dependency>
    </dependencies>
           

<2> 資源配置

建立dubbo.properties檔案并配置以下

#應用名稱
dubbo.application.name=myProvider
#注冊位址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#配置包的掃描
scan_base_packages=com.yanhj.provider
#協定類型
dubbo.protocol.name=dubbo
#協定端口
dubbo.protocol.port=20880
           

建立log4j.properties檔案并配置以下

###set log levels###
log4j.rootLogger=info, stdout
###output to the console###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{dd/MM/yy HH:mm:ss:SSS z}] %t %5p %c{2}: %m%n
           

<3> java實作代碼

建立DemoService接口

package com.yanhj.provider;
/*
 *  對外接口
 */
public interface DemoService {
    String sayHello(String name);
}
           

建立DemoServiceImpl類,并實作DemoService接口

package com.yanhj.provider;

import org.apache.dubbo.config.annotation.Service;

/**
 * 具體實作
 * 此處的@Service注解必須使用dubbo包中的
 */
@Service
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}
           

<4>建立啟動類

package com.yanhj;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * 服務啟動類
 * @EnableDubbo激活Dubbo
 */
@EnableDubbo
public class APP {
    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(APP.class);
        context.start();
        System.in.read();
    }
}
           

<4>将該項目通過maven打成jar包,并install到maven庫中,需要在comsumer項目pom中引入

(2)通過maven建立comsumer項目

<1>在comsumer項目的pom檔案中引入jar包

<dependencies>
        <!--該依賴是先前建立的Provider項目通過maven打成的jar,此處的groupId和artifactId根據實際的Provider項目而定-->
        <dependency>
            <groupId>myDubbo-HelloWorld-Provider</groupId>
            <artifactId>com.yanhj</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--注冊中心-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>2.7.2</version>
        </dependency>
    </dependencies>
           

<2> 資源配置

建立dubbo.properties檔案并配置以下

#應用名稱
dubbo.application.name=myConsumer
#注冊中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
           

<3> java實作代碼

建立DemoServiceComponent類

package com.yhj.consumer;

import com.yanhj.provider.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;

@Component("demoServiceComponent")
public class DemoServiceComponent {
    @Reference
    private DemoService demoService;

    public String sayHello(String s) {
        return demoService.sayHello(s);
    }
}
           

<4>建立啟動類

建立Consumer啟動類

package com.yhj.consumer;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

/**
 * @ComponentScan注解用于掃描帶有@Component注解的類(DemoServiceComponent類)
 * @EnableDubbo 激活Dubbo
 */
@ComponentScan(value = {"com.yhj.consumer"})
@EnableDubbo
public class Consumer {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext  context = new AnnotationConfigApplicationContext(Consumer.class);
        context.start();
        DemoServiceComponent service = (DemoServiceComponent)context.getBean("demoServiceComponent");
        String hello = service.sayHello("world");
        System.out.println("result :" + hello);
    }

}

           

3、項目運作

1、啟動provider項目

​ 直接啟動類即可。

2、啟動Consumer項目

​ 直接啟動類即可。

4、最終效果

控制台中會資料 result :Hello world 資料

[09/12/19 22:33:28:238 CST] main  INFO transport.AbstractClient:  [DUBBO] Succeed connect to server /192.168.174.1:20880 from NettyClient 192.168.174.1 using dubbo version 2.7.2, channel is NettyChannel [channel=[id: 0xc06ee474, L:/192.168.174.1:55413 - R:/192.168.174.1:20880]], dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:238 CST] main  INFO transport.AbstractClient:  [DUBBO] Start NettyClient yanhj/192.168.174.1 connect to the server /192.168.174.1:20880, dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:323 CST] main  INFO config.AbstractConfig:  [DUBBO] Refer dubbo service com.yanhj.provider.DemoService from url zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?anyhost=true&application=myConsumer&bean.name=ServiceBean:com.yanhj.provider.DemoService&check=false&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.yanhj.provider.DemoService&lazy=false&methods=sayHello&pid=8108&register=true&register.ip=192.168.174.1&release=2.7.2&remote.application=myProvider&revision=1.0-SNAPSHOT&side=consumer&sticky=false&timestamp=1575902006426, dubbo version: 2.7.2, current host: 192.168.174.1
result :Hello world
[09/12/19 22:33:28:643 CST] Thread-0  INFO annotation.AnnotationConfigApplicationContext: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@1f95c5d: startup date [Mon Dec 09 22:33:25 CST 2019]; root of context hierarchy
[09/12/19 22:33:28:644 CST] Thread-0  INFO support.AbstractRegistryFactory:  [DUBBO] Close all registries [zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=myConsumer&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=8108&release=2.7.2&timestamp=1575902006881], dubbo version: 2.7.2, current host: 192.168.174.1
[09/12/19 22:33:28:644 CST] Thread-0  INFO zookeeper.ZookeeperRegistry:  [DUBBO] Destroy registry:zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=myConsumer&dubbo=2.0.2&interface=org.apache.dubbo.registry.RegistryService&pid=8108&release=2.7.2&timestamp=1575902006881, dubbo version: 2.7.2, current host: 192.168.174.1