概述
1.一般登录的时候可能要保存的值,用ThreadLocal保存
package com.banksteel.openerp.commons.filter;
public class SaasParameter {
// 创建线程局部变量,并初始化值
private static ThreadLocal<String> memberIdThreadLocal = new ThreadLocal<String>() {
protected String initialValue() {
return "";
};
};
// 提供线程局部变量set方法
public static void setMemberId(String memberId) {
memberIdThreadLocal.set(memberId);
}
// 提供线程局部变量get方法
public static String getMemberId() {
return memberIdThreadLocal.get();
}
}
2,要保存的值
SaasParameter.setMemberId(“xxxx”);
3.web层的comsumer
dubbo-comsumer.xml 配置监听
<dubbo:consumer filter="${dubbo.consumer.filter}" timeout="${dubbo.consumer.timeout}" check="false" />
4.监听的java类。把SaasParameter里面的值给dubbo
package com.banksteel.openerp.commons.filter;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
public class SaasConsumerFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
//把SassParameter里面的值放到dubbo监听的invoke里面
invocation.getAttachments().put("memberId", SaasParameter.getMemberId());
Result result = invoker.invoke(invocation);
return result;
}
}
5.service的provider提供方
dubbo-provider.xml 配置监听
<dubbo:provider filter="${dubbo.provider.filter}"
timeout="${dubbo.provider.timeout}" />
6.监听的java类,把dubbo里面的值再给SaasParameter
package com.banksteel.openerp.commons.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dubbo.rpc.Filter;
import com.alibaba.dubbo.rpc.Invocation;
import com.alibaba.dubbo.rpc.Invoker;
import com.alibaba.dubbo.rpc.Result;
import com.alibaba.dubbo.rpc.RpcException;
import com.alibaba.dubbo.rpc.RpcResult;
import cn.mysteel.util.StringUtils;
public class SaasProviderFilter implements Filter {
private Logger logger = LoggerFactory.getLogger(SaasProviderFilter.class);
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String memberId = invocation.getAttachments().get("memberId");
SaasParameter.setMemberId(memberId);
return invoker.invoke(invocation);
}
}
7,service层调用SaasParameter的值
SaasParameter.getMemberId()
转载于:https://www.cnblogs.com/guilf/p/9301417.html
最后
以上就是爱笑白云为你收集整理的dubbo隐式传值实例的全部内容,希望文章能够帮你解决dubbo隐式传值实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复