Dubbo管理平臺設計說明

 

1、    系統部署圖html

說明:java

因爲dubbo消費者和提供者服務適合內部網絡環境下的服務調用協同,所謂內部網絡環境就是dubbo消費者和服務者部署服務器的IP和端口不須要映射轉換就能暢通訪問的網絡環境,這是有dubbo暴露服務的方式決定的。mysql

因此dubbo提供者在爲內部消費者提供服務同時,還要對外提供服務的話,我這邊就經過http代理的訪問進行訪問。就是上圖所說的「http代理服務」。這個服務程序能夠知足集羣負載部署,其核心要點是要部署在能內外網穿透的區域,其緣由以下:web

1)咱們要經過「dubbo管理平臺」針對對外服務進行訪問權限,及IP白名單管理。這些配置數據信息(鏈接內網數據庫)http的代理程序必須可以訪問獲得才能對服務進行控制。spring

2)只有「http代理服務」實現了內外網絡的暢通,才能保證http進行訪問。sql

「Dubbo管理平臺」實現了消費者服務進行屏蔽,恢復調用,對提供者進行禁用與恢復禁用,服務調用成功/失敗結果進行統計,對外服務ip白名單,對外服務受權等功能。數據庫

2、    代碼編寫規範json

2.1消費者服務編碼規範api

1)配置文件服務器

消費者服務配置文件說明:

<!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 -->

<dubbo:application name="dubbo-consumer" />

<!-- 必須引入,用於服務監控-->

<dubbo:monitor protocol="registry" />

<!-- 使用zookeeper註冊中心暴露服務地址 -->

<!-- 註冊中心地址 -->

<dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}"  client="curator"  />

<!-- 用戶服務接口 -->

<dubbo:reference interface="com.ws.facade.UserFacade" id="userFacadeClient"  check="false"/>

 

消費者spring mvc配置文件特別說明:

<!-- json轉換時要加些配置,否則json字符串可能會多一串引號-->

<mvc:annotation-driven>

<mvc:message-converters>

<bean class="org.springframework.http.converter.StringHttpMessageConverter" />

<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />

</mvc:message-converters>

</mvc:annotation-driven>

2)java代碼編寫說明

請求參數說明:

全部的請求及接口的參數統一用Map<String,String>處理,返回用ResponseUtil封裝,接口實例代碼以下:

package com.ws.facade;

 

import java.util.Map;

 

import com.dubboproxy.utils.ResponseUtil;

 

/**

 * Description: com.ws.facade

 */

public interface UserFacade {

       ResponseUtil readMsg(Map<String, String> arg) throws RuntimeException;

 

}

 

2.2對外代理客戶端編碼規範

1)配置文件

對外代理客戶端spring mvc配置文件特別說明:

<mvc:message-converters register-defaults="false">

               <!--先進行string轉換會去掉字符串的多餘引號-->

                   <bean class="org.springframework.http.converter.StringHttpMessageConverter" />

             

            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">

                <property name="supportedMediaTypes">

                    <list>

                        <value>text/html;charset=UTF-8</value>

                        <value>application/json</value>

                    </list>

                </property>

                <property name="features">

                    <list>

                        <value>WriteMapNullValue</value>

                        <value>QuoteFieldNames</value>

                        <value>WriteDateUseDateFormat</value>

                    </list>

                </property>

            </bean>

   </mvc:message-converters>

2)http代理配置信息

配置內容(resource目錄下要有config.properties這個文件):

dubboProxy=http://localhost:8080/manage-proxy/httpproxy.shtml

dubboSysKey=admin

certName=PublicKey

3)spring mvc 調用案例:

package com.ws;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.TypeReference;

import com.sdubbo.util.*;

/**

 *

 * @author panda

 *下午9:29:57

 */

@RestController

@RequestMapping("/sys/dubboip")

public class DubboIpListController {

/*

 * 查詢數據

 * 固定參數:

 * page是第幾頁

 * limit是每頁限制幾行

 * 參數最終必須用map封裝

 */

       @RequestMapping(value = "/listdata")

       public ResponseUtil listdata(String ip, Integer page, Integer limit) throws IOException {

              Map parames = new HashMap();

              parames.put("ip", ip);

              parames.put("page",page);

              parames.put("limit", limit);

              String serviceid="fami_com.crossoverJie.api.DemoApi";/*對外服務id*/

           String json_str=DubboHttpUtil.httpcontrol(serviceid, parames);  /*參數必須用map*/

           Result result=JSON.parseObject(json_str.toString(),new TypeReference<Result>(){});

           return ResponseUtil.success().put(result.getResultdata());

       }

}

此外,在resource目錄還要加入PublicKey文件。

2.3提供者服務編碼規範

1)服務提供者配置文件:

<!-- 這個是必須引入,用於http代理 -->

<context:component-scan base-package="com.dubboproxy.controller" />

<!-- 這個是必須引入,提供方應用信息,用於計算依賴關係 -->

<dubbo:application name="dubbo-provider2" />

<!-- 這個是必須引入,使用zookeeper註冊中心暴露服務地址 -->

<dubbo:registry protocol="zookeeper" file="${catalina.home}/dubbo-registry/dubbo-provider2.properties"

address="${dubbo.registry.address}"   client="curator" />

<!-- 這個是必須引入,用dubbo協議在20882端口暴露服務 -->

<dubbo:protocol name="dubbo" port="20882"   />

<!-- 這個是必須引入,用於服務監控,沒有此配置,服務不會被監控 -->

dubbo:monitor protocol="registry" />

<!-- 如下是提供的具體服務配置,根據實際狀況 -->

<bean id="userFacade" class="com.ws.facade.impl.UserFacadeImpl" />

<!-- 用戶服務接口 -->

<dubbo:service interface="com.ws.facade.UserFacade" ref="userFacade"  />

2)java接口編碼規範

package com.ws.facade;

import java.util.Map;

import com.dubboproxy.utils.ResponseUtil;

/**

 * Description: com.ws.facade

必須是map<String,String>入參

 */

public interface UserFacade {

       ResponseUtil readMsg(Map<String, String> arg) throws RuntimeException;

}

接口實現案例

package com.ws.facade.impl;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import com.dubboproxy.utils.PageUtils;

import com.dubboproxy.utils.ResponseUtil;

import com.ws.entity.DubboIpListEntity;

import com.ws.facade.UserFacade;

import com.ws.service.DubboIpListService;

public class UserFacadeImpl implements UserFacade{

       @Autowired

       private DubboIpListService dubboiplistservice;

/**

返回ResponseUtil類型

**/

        public ResponseUtil readMsg(Map<String, String> param) throws RuntimeException {

                  String ip=param.get("ip");

                  Integer limit=Integer.valueOf(param.get("limit")) ;

                 

                  Integer page=Integer.valueOf( param.get("page"));

                  Map<String, Object> map =new HashMap<String, Object>();

                  map.put("ip",param.get("ip"));

                  map.put("limit", limit);

                     map.put("offset", (page - 1) * limit);

                  List<DubboIpListEntity> dubboiplist = dubboiplistservice.findDubboIpList(map);

                     int total = dubboiplistservice.findDubboIpListCount(ip);

                     PageUtils pageUtil = new PageUtils(dubboiplist, total, limit, page);

                  return   ResponseUtil.success().put(pageUtil);

           }

}

提供者須要引入jar:

<dependency>

             <groupId>com.providerhttp</groupId>

            <artifactId>providerhttp</artifactId>

            <version>0.0.1-SNAPSHOT</version>

        </dependency>

代理客戶端須要引入jar:

<dependency>

            <groupId>com.dubbohttp</groupId>

           <artifactId>dubbohttp</artifactId>

           <version>0.0.1-SNAPSHOT</version>

        </dependency>

3、    Dubbo管理平臺介紹

利用zookeeper做爲註冊中心,mysql數據管理存儲。

3.1首頁

說明:

用戶進入後能看到左邊的菜單欄還有右邊會顯示服務方法被成功調用的次數。

3.2系統管理

說明:

管理員列表

對用戶增刪改查操做

角色管理

對角色增刪改查操做

菜單管理

對顯示菜單增刪改查操做

服務類型管理

對服務類型及對應名稱管理

服務組管理

對服務對應組進行管理

3.3dubbo代理管理

說明:

對外IP白名單

只有配置了IP白名單才能保證訪問

代理服務列表

對服務進行啓用/禁用操做

對外服務配置

對服務進行映射性配置

用戶組受權

給服務進行組歸類

3.4dubbo資源中心

說明

消費者服務列表

對消費者進行屏蔽/啓用管理

提供者服務類別

對提供者進行啓用/禁用管理

相關文章
相關標籤/搜索