spring实现dubbo服务

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值