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; } }