spring实现dubbo服务

xiaoxiao2021-02-28  51

1.什么是Dubbo

简单来说dubbo就是分布式服务架构,是高性能和透明化RPC远程服务调用方案。

2.dubbo分为服务生产者(producer)和消费者(customer)两个模式。

3.配置文件:

    <!-- 提供方应用信息,用于计算依赖关系 -->     <dubbo:application name="dubbo_cfg"  />       <!-- 使用multicast广播注册中心暴露服务地址 -->    <!--  <dubbo:registry address="multicast://224.5.6.7:1234" /> -->        <!-- 使用zookeeper注册中心暴露服务地址 -->     <dubbo:registry address="zookeeper://10.10.110.35:2181" />       <!-- 用dubbo协议在20880端口暴露服务 -->     <dubbo:protocol name="dubbo" port="20881" />        <!-- 客户 端的service bean的id 和版本号 需要对方提供-->     <dubbo:reference id="serviceStore" version="v-fg"         interface="com.golden.port.framework.stores.IServiceStore"         retries="0" timeout="30000" /> </beans>    

图1-1 客户端的配置

 

服务端配置:

    <!-- 提供方应用信息,用于计算依赖关系 -->     <dubbo:application name="fg"  />       <!-- 使用multicast广播注册中心暴露服务地址 -->    <!--  <dubbo:registry address="multicast://224.5.6.7:1234" /> -->      <!-- 使用zookeeper注册中心暴露服务地址 -->     <dubbo:registry address="zookeeper://10.10.110.35:2181" />     <!-- 用dubbo协议在20880端口暴露服务 -->     <dubbo:protocol name="dubbo" port="10880" />        <!-- 和本地bean一样实现服务 -->     <bean id="serviceStore" class="com.wawj.master.service.dubbo.impl.ServiceStore" />      <!-- 声明需要暴露的服务接口 -->     <dubbo:service interface="com.wawj.master.service.dubbo.IServiceStore" ref="serviceStore" version="${dubbo.version}"/>

4.公共服务接口:

 

public interface IServiceStore {            public abstract ResultValue access(String paramString, Map<String, Object> paramMap); }

package com.wawj.master.service.dubbo.impl; import java.lang.reflect.Method; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import com.alibaba.fastjson.JSON; import com.wawj.master.service.dubbo.IServiceStore; import com.wawj.master.service.dubbo.results.ResultValue; public class ServiceStore implements IServiceStore{     //服务器正常     public static int SUCCESS = 1;     //服务未知错误     public static int ERROR = 0;          private static final Logger logger = LoggerFactory.getLogger(ServiceStore.class);     @Autowired     private ApplicationContext context;          @Override     public ResultValue access(String path,Map<String, Object> param) {                  ResultValue resultValue = new ResultValue();         try {             String [] obj_method = path.split("\\.");             Object handler = context.getBean(obj_method[0]);             String methodName = obj_method[1];             Object result = null;             Method method = null;             if(null != param ){                 method= handler.getClass().getDeclaredMethod(methodName,Map.class);                 result = method.invoke(handler,param);             }else{                 method= handler.getClass().getDeclaredMethod(methodName);                 result = method.invoke(handler);             }                          if(result!=null){                 resultValue.setData(JSON.toJSONString(result));                 resultValue.setCode(SUCCESS);                 resultValue.setMessageCode("200");                 resultValue.setMessageContent("访问成功");             }else{                 resultValue.setCode(ERROR);                 resultValue.setMessageCode("300");                 resultValue.setMessageContent("数据异常");             }             return resultValue;         } catch (Exception e) {             resultValue.setCode(ERROR);             resultValue.setMessageCode("500");             resultValue.setMessageContent("服务异常");             return resultValue;         }     }      }

返回的对象格式

package com.wawj.master.service.dubbo.results; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.Serializable; public class ResultValue   implements Serializable {   private static final long serialVersionUID = 1L;   private String data;   private JSONArray jsonArray;   private JSONObject jsonObject;   private Integer code;   private String messageCode;   private String messageContent;   public String getData()   {     return this.data; }   public void setData(String data) {     this.data = data; }   public JSONArray getJsonArray() {     this.jsonArray = JSON.parseArray(this.data);     return this.jsonArray; }   public void setJsonArray(JSONArray jsonArray) {     this.jsonArray = jsonArray; }   public JSONObject getJsonObject() {     this.jsonObject = JSON.parseObject(this.data);     return this.jsonObject; }   public void setJsonObject(JSONObject jsonObject) {     this.jsonObject = jsonObject; }   public Integer getCode() {     return this.code; }   public void setCode(Integer code) {     this.code = code; }   public String getMessageCode() {     return this.messageCode; }   public void setMessageCode(String messageCode) {     this.messageCode = messageCode; }   public String getMessageContent() {     return this.messageContent; }   public void setMessageContent(String messageContent) {     this.messageContent = messageContent;   } }

转载请注明原文地址: https://www.6miu.com/read-76418.html

最新回复(0)