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®ister=true®ister.ip=192.168.174.1&release=2.7.2&remote.application=myProvider&revision=1.0-SNAPSHOT&side=consumer&sticky=false×tamp=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×tamp=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×tamp=1575902006881, dubbo version: 2.7.2, current host: 192.168.174.1