1.新建项目
利用idea创建一个父项目,三个子项目,其中一个项目为生产者,一个项目为消费者,一个为接口等公共服务项目,生产者和消费者需要有web依赖,可以作为tomcat容器启动。
2.项目依赖
<dependencies> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.6</version> </dependency> <!-- zk的依赖 --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.6</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <b>本文来源gao@dai!ma.com搞$代^码!网7</b> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>
3.在facade项目中新建接口
4.编写生产者
4.1 增加dubbo配置
server.port=8081 dubbo.registry.address=zookeeper://localhost:2181 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.registry.timeout=30000 dubbo.application.name=dubbo-provider-ll
4.2 编写生产者dubbo filter
public class ProviderFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { Object threadName= invocation.getAttachment("ThreadName"); if(null!=threadName){ Thread thread = Thread.currentThread(); thread.setName(threadName.toString()); } return invoker.invoke(invocation); } }
注意:此处Filter 是dubbo的filter,不是servlet的filter
这里代码的目的是将从消费端传来的线程名称设置为线程名称
在resources目录下新建META-INF/dubbo/com.alibaba.dubbo.rpc.Filter 文件
即新增目录META-INF/dubbo和文件 com.alibaba.dubbo.rpc.Filter
在文件中增加,等号后面为实现dubbo filter的实现类路径
providerFilter=com.dubbo.spring.provider.filter.ProviderFilter
4.3编写dubbo生产者实现类
@Service(filter = {"providerFilter"}) public class DemoServiceImpl implements IDemoService { public Logger LOGGER= LoggerFactory.getLogger(DemoServiceImpl.class); @Override public String getName() { LOGGER.info("provider ThreadName : "+Thread.currentThread().getName()); return "dubbo-test"; } }
5.编写消费者
5.1编写消费者filter
public class DubboFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { String name = Thread.currentThread().getName(); invocation.setAttachment("ThreadName",name); return invoker.invoke(invocation); } }