Springboot 整合 Dubbo

dubbo最近更新了dubbo-spring-boot-starter的jar包,廢話不多少,看看如何使用。

首先我們可以通過github編譯打包最新的starter,

Git地址為:https://github.com/alibaba/dubbo-spring-boot-starter.git

在springboot項目的pom.xml中新增,添加maven的依賴。

		
<dependency>
<groupid>com.alibaba.spring.boot/<groupid>
<artifactid>dubbo-spring-boot-starter/<artifactid>
<version>2.0.1-SNAPSHOT/<version>
/<dependency>

可以新建一個springboot-dubbo-api工程,用來做接口定義,方便provider和consumer端使用,避免重複編碼

接口定義示例:

import com.xq.live.dubbo.common.BaseResp;
import com.xq.live.dubbo.common.Pager;
import com.xq.live.dubbo.model.Shop;
import com.xq.live.dubbo.service.BaseSerivce;
import com.xq.live.dubbo.vo.ShopInVo;
/**
* @package: com.xq.live.dubbo.api
* @description: 商家接口定義
* @author: zhangpeng32
* @date: 2018/3/25 12:18
* @version: 1.0
*/
public interface ShopApi extends BaseSerivce<shop>{
/**
* 分頁查詢
* @param shopInVo
* @return
*/
public BaseResp<pager>> queryWithPg(ShopInVo shopInVo);
}
/<pager>/<shop>

在這裡我定義了一個BaseService,用來定義一些通用的接口方法,包含了簡單的增刪改查,也可以把分頁的方法寫在裡面。

/**
* @package: com.xq.live.dubbo.common
* @description: 基礎接口類
* @author: zhangpeng32
* @date: 2018/3/25 12:27
* @version: 1.0
*/
public interface BaseSerivce {
/**
* 新增記錄
* @param t
* @return
*/
public BaseResp<long> create(T t);
/**
* 根據主鍵刪除
* @param pk
* @return
*/
public BaseResp<integer> delete(Long pk);
/**
* 根據主鍵更新記錄
* @param t
* @return
*/
public BaseResp<integer> update(T t);
/**
* 根據主鍵查詢
* @param pk
* @return
*/
public BaseResp get(Long pk);
}
/<integer>/<integer>/<long>

在springboot-dubbo-provider項目中,首先做好dubbo和springboot的集成配置:

## dubbo springboot 配置
spring.dubbo.application.id=live-dubbo-provider
spring.dubbo.application.name=live-dubbo-provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880

在springboot的啟動類添加@EnableDubboConfiguration註解:

@MapperScan("com.xq.live.dubbo.dao")
@EnableDubboConfiguration
@SpringBootApplication
public class DubboServerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboServerApplication.class, args);
}
}

ShopApi接口實現類,示例如下:

import com.alibaba.dubbo.config.annotation.Service;
import com.xq.live.dubbo.api.ShopApi;
import com.xq.live.dubbo.common.BaseResp;
import com.xq.live.dubbo.common.Pager;
import com.xq.live.dubbo.common.ResultEnums;
import com.xq.live.dubbo.dao.ShopDao;
import com.xq.live.dubbo.model.Shop;
import com.xq.live.dubbo.vo.ShopInVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @package: com.xq.live.dubbo.handler
* @description: 商家dubbo服務實現類
* @author: zhangpeng32
* @date: 2018/3/25 12:40
* @version: 1.0
*/
@Service(interfaceClass = ShopApi.class)
@Component
public class ShopHandler implements ShopApi {
@Autowired
private ShopDao shopDao;
@Override

public BaseResp<long> create(Shop shop) {
return null;
}
@Override
public BaseResp<integer> delete(Long pk) {
return null;
}
@Override
public BaseResp<integer> update(Shop shop) {
return null;
}
@Override
public BaseResp<shop> get(Long pk) {
Shop shop = shopDao.selectByPrimaryKey(pk);
return new BaseResp<shop>(ResultEnums.SUCCESS, shop);
}
@Override
public BaseResp<pager>> queryWithPg(ShopInVo shopInVo) {
return null;
}
}
/<pager>/<shop>/<shop>/<integer>/<integer>/<long>

啟動本地的zookeeper: 在 \zookeeper-3.4.11\bin目錄下執行zkServer.bat,啟動zookeeper。

啟動dubbo-admin可以用戶查看服務註冊情況以及權重調整等。

源碼可以在這裡獲取:https://github.com/alibaba/dubbo.git

啟動後界面如下:

Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例

啟動springboot-dubbo-provider應用,可以通過dubbo-admin看到服務註冊成功。

Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例

消費端

消費端application.properties配置為:

## 避免和 server 工程端口衝突
server.port=8081
## Dubbo 服務消費者配置
spring.dubbo.application.name=live-dubbo-consumer
spring.dubbo.application.id=live-dubbo-consumer
spring.dubbo.protocol.port=20800
spring.dubbo.protocol.name=dubbo
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181

接口實例化和調用示例:

import com.alibaba.dubbo.config.annotation.Reference;
import com.xq.live.dubbo.api.ShopApi;
import com.xq.live.dubbo.common.BaseResp;
import com.xq.live.dubbo.model.Shop;
import org.springframework.stereotype.Component;
/**
* @package: com.xq.live.dubbo.service
* @description: TODO
* @author: zhangpeng32
* @date: 2018/3/25 12:58
* @version: 1.0
*/
@Component
public class ShopDubboService {
@Reference
private ShopApi shopApi;
public BaseResp<shop> get(Long id){
return shopApi.get(id);
}
}
/<shop>

下面是消費端的springboot啟動類配置:

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; 

import com.xq.live.dubbo.common.BaseResp;
import com.xq.live.dubbo.model.Shop;
import com.xq.live.dubbo.service.ShopDubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableDubboConfiguration
public class DubboClientApplication {
@Autowired
private ShopDubboService shopDubboService;
public static void main(String[] args) {
SpringApplication.run(DubboClientApplication.class, args);
}
@RequestMapping(value = "/")
public String hello(){
BaseResp<shop> baseResp = shopDubboService.get(1L);
return "hello "+ baseResp.getCode()+": NAME : "+baseResp.getData().getShopName();
}
}
/<shop>

啟動消費端,我這裡使用的端口是8081,服務器採用的springboot內置的tomcat.啟動後可以在dubbo-admin看到消費端註冊成功。

Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例

總結:

1、dubbo和springboot的結合非常簡單,引入dubbo的starter即可。

2、application.properties配置清晰簡單,各配置都非常完整。

3、本示例中用到的各種工具類可以忽略,我只是為了統一返回需要做的一個定義。

4、目前沒遇到什麼問題,如果有,可以發消息我一起探討。


分享到:


相關文章: