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