現在越來越多的公司開發項目中使用了springboot作為搭建服務的架構,而dubbo是一款國内使用較多的SOA架構開發的中間件,其主要由三個部分組成:生産者,消費者,注冊中心。注冊中心一般使用的是zookeeper。于是我們從頭來捋一捋如何搭建一個springboot+dubbo項目。
第一步,本地搭建zookeeper注冊中心
請參考文章:springboot整合dubbo+zookeeper(一)
第二步,本地搭建dubbo監控控台dubbo-admin
請參考文章:springboot整合dubbo+zookeeper(二)
第三步,将服務注冊到zookeeper
- 建立一個springboot項目
項目代碼結構如下:
- 服務接口定義
package com.dubbo.service;/** * @author test * @time 2019/8/27 17:51 * @description: * 一些模拟資料庫事務的方法 */public interface TestService { public void insert(); public void delete(); public void update(); public void select();}
- 用到的兩個主要依賴包
org.apache.dubbo dubbo-spring-boot-starter 2.7.7com.101tec zkclient 0.10
- 生産者相關代碼及配置
pom主要配置:
application.properties:
接口服務實作:
package com.dubbo.provider.service.impl;import com.alibaba.dubbo.config.annotation.Service;import com.dubbo.service.TestService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author test * @time 2019/8/27 15:35 * @description: * 模拟資料庫事務實作 */@Service(version = "1.0.0",timeout = 3000)public class TestServiceImpl implements TestService { private Logger log = LoggerFactory.getLogger(TestServiceImpl.class); @Override public void insert() { System.out.println("insert 服務"); } @Override public void delete() { System.out.println("delete 服務"); } @Override public void update() { System.out.println("update 服務"); } @Override public void select() { System.out.println("select 服務"); }}
注意:添加@Service注解,切記注解不是用spring的service注解,是 com.alibaba.dubbo.config.annotation.Service,由阿裡提供的dubbo的注解,配上版本号1.0.0說明向zookeeper注冊的是版本為1.0.0的TestService接口,逾時時長為3000ms等資訊。
application.properties 參數配置:
com.dubbo.testprovider0.0.1-SNAPSHOTproviderorg.apache.dubbodubbo-spring-boot-starter2.7.7com.101teczkclient0.10
啟動類:
package com.dubbo.provider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}
步驟總結:
1.搭建pom環境
2.寫好配置檔案(一定要寫上dubbo.scan.base-packages該配置會掃描你寫的服務并注冊到zookeeper)
3.具體服務實作
4.運作springboot啟動類即可
- 消費者相關代碼及配置
pom主要配置:
com.dubbo.testconsumer0.0.1-SNAPSHOTconsumercom.dubbo.testservice1.0-SNAPSHOTorg.apache.dubbodubbo-spring-boot-starter2.7.7com.101teczkclient0.10
application.properties 參數配置:
#避免端口沖突server.port=8083#dubbo configurationdubbo.application.name=dubbo_consumerdubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://127.0.0.1:2181
遠端調用入口:
package com.dubbo.consumer.controller;import com.alibaba.dubbo.config.annotation.Reference;import com.dubbo.service.TestService;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author test * @time 2019/8/27 15:58 * @description: * 調用dubbo */@RestControllerpublic class TestController { @Reference(version = "1.0.0") private TestService testServiceImpl; @RequestMapping("/insert") public String insert(){ testServiceImpl.insert(); return "insert 調用成功"; } @RequestMapping("/delete") public String delete(){ testServiceImpl.delete(); return "delete 調用成功"; } @RequestMapping("/update") public String update(){ testServiceImpl.update(); return "update 調用成功"; } @RequestMapping("/select") public String select(){ testServiceImpl.select(); return "select 調用成功"; }}
注意:TestController類中的代碼結構使用服務注入時使用dubbo的@Reference注解。
啟動類:
package com.dubbo.consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); }}
- 依次啟動生産者項目,消費者項目(等生産者起來之後再啟動,否則找不到服務)
重新整理dubbo控台,可以看到生産者消費者顯示正常。
生産者:
消費者:
接口服務:
- 接口調用測試
通路位址 http://localhost:8080/insert 結果如下:
服務調用日志:
踩坑:
java.lang.NoClassDefFoundError: org/apache/curator/framework/recipes/cache/TreeCacheListener
在pom檔案中加入這兩個依賴即可:
org.apache.curator curator-framework 4.0.1org.apache.curator curator-recipes 2.8.0
至此已經完成了dubbo的正常調用。
文章僅供學習參考,如有疑問歡迎評論交流!如果你對相關文章感興趣,後續持續輸出相關文章。
歡迎關注+轉發+評論,擷取源碼私信我