前言
项目重构使用springCloud项目,因为有其他服务提供的dubbo接口之前都是mvc项目xml文件配置不太好,所以需要调研一下springCloud调用dubbo接口,提供者都是已上线项目所以本文根据自身需求所做,废话不多说看下面。
消费者
pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.zxq.iov.cloud.sp</groupId>
<artifactId>sp-is-interface</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
配置文件
#application.dubbo-properties consumer
dubbo.application.name=knowledge-consumer
dubbo.application.organization=zxq
dubbo.application.owner=cloud
dubbo.registry.address.protocol=zookeeper
dubbo.registry.address=10.25.239.99:2181
dubbo.registry.group=pp
dubbo.registry.id=zookeeper_registry
dubbo.registry.protocol=zookeeper
dubbo.registry.client=zkclient
dubbo.consumer.timeout=3000
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=29988
dubbo.protocol.server=netty
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@EnableDubbo(scanBasePackages = "com.saicmotor.toc.knowledge")
@PropertySource("classpath:/application.dubbo-properties")
@ComponentScan(value = {"com.saicmotor.toc.knowledge"})
public class consumerConfiguration {
}
实现类
import com.alibaba.dubbo.config.annotation.Reference;
import com.saicmotor.toc.knowledge.service.CustomerService;
import com.zxq.iov.cloud.sp.is.api.CcmInfoApi;
import com.zxq.iov.cloud.sp.is.api.IUserApi;
import com.zxq.iov.cloud.sp.is.api.dto.ResponseResult;
import org.springframework.stereotype.Service;
@Service
public class CustomerServiceImpl implements CustomerService {
@Reference(version = "1.0.0")
private CcmInfoApi ccmInfoApi;
@Reference(version = "1.0")
private IUserApi userApi;
启动类要加@EnableDubbo注意包(alibaba.dubbo)
注意
注解需要用alibaba.dubbo下的注解,因为现有提供者都是注册在zk上的所以我这也得用zk然后遇到很多坑,一开始注册不到zk上注意依赖和配置,在之后就是@Reference注入为空,发现提供者有version我这边没加所以为空,这个需要注意,提供者没有可以不加。
提供者
成功之后我也自己写了一个提供者去测试,新建了一个api接口模块,一个provide模块,不多说直接上代码
api接口模块
public interface ProviderService {
ShortDto findById(Long id);
}
这里只有简单的一个接口需要provide模块实现类去实现
pom文件
<dependency>
<groupId>com.saicmotor.toc</groupId>
<artifactId>knowledge-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
提供者和消费者都需要加这个api接口模块依赖,其余依赖同上
配置
dubbo.application.name=knowledge-provider
dubbo.application.organization=zxq
dubbo.application.owner=cloud
dubbo.registry.address=10.25.239.99:2181
dubbo.registry.address.protocol=zookeeper
dubbo.registry.group=pp
dubbo.registry.id=zookeeper_registry
dubbo.registry.protocol=zookeeper
dubbo.registry.client=zkclient
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=29989
dubbo.protocol.server=netty
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@EnableDubbo(scanBasePackages = "com.saicmotor.toc.knowledge")
@PropertySource("classpath:/application.dubbo-properties")
@ComponentScan(value = {"com.saicmotor.toc.knowledge"})
public class ProviderConfiguration {
}
实现类
import com.alibaba.dubbo.config.annotation.Service;
import com.saicmotor.toc.knowledge.dto.ShortDto;
import com.saicmotor.toc.knowledge.service.ProviderService;
@Service(version = "1.0")
public class ProviderServiceImpl implements ProviderService {
@Override
public ShortDto findById(Long id) {
System.out.println("yes");
ShortDto shortDto = new ShortDto();
shortDto.setCode("aaa");
return shortDto;
}
这里注意@Service要用alibaba.dubbo下的,并且我这边也加了version,消费者注入也需要加version。
启动类要加@EnableDubbo注意包(alibaba.dubbo)
注意
返回如果是实体需要实现 Serializable 序列化
希望能帮助需要的各位。附带一个dubbo官方文档
注解配置 | Apache Dubbohttps://dubbo.apache.org/zh/docsv2.7/user/configuration/annotation/