在工作当中,随着技术的迭代和项目的不断开发,Dubbo和SpringCloud Alibaba之间如何更好的整合调用是个很常见的问题,
举个简单的小例子
依赖:
<!--config-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置:
bootstrap.yml
spring:
profiles:
active: dev
bootstrap-dev.yml
spring:
application:
name: dubbo-provider
cloud:
nacos:
config:
server-addr: 192.168.95.136:8848
file-extension: yml
namespace: bfaf7fc0-cf2e-4614-b760-537332fe9c47
nacos作为dubbo的服务注册中心
<properties>
<apache-dubbo.version>2.7.4.1</apache-dubbo.version>
<nacos.version>1.1.4</nacos.version>
</properties>
依赖:
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${apache-dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${apache-dubbo.version}</version>
</dependency>
<!-- Dubbo Registry Nacos -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${apache-dubbo.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.3</version>
</dependency>
配置
dubbo:
registry:
address: nacos://192.168.95.136:8848
#config-center:
#namespace: bfaf7fc0-cf2e-4614-b760-537332fe9c47
scan:
base-packages: club.codenow.dubbo.provider.service
application:
name: dubbo-provider
protocol:
port: -1
name: dubbo
服务提供者:
接口
public interface ProviderService {
String getTestString();
}
提供者实现接口
@Service(version = "1.0.0")
public class ProviderServiceImpl implements ProviderService {
@Override
public String getTestString() {
return "dubbo provider service Get Test String ";
}
}
服务消费者:
public class XXService{
@Reference(version="1.0.0")
private ProviderService providerService;
}
关于 spring-cloud-starter-alibaba-nacos-discovery 的 starter 配置项如下所示:
配置项 | Key | 默认值 | 说明 |
服务端地址 | spring.cloud.nacos.discovery.server-addr | 无 | Nacos Server 启动监听的ip地址和端口 |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 给当前的服务命名 |
服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 设置服务所处的分组 |
权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围 1 到 100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册的IP地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
命名空间 | spring.cloud.nacos.discovery.namespace | 无 | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 |
AccessKey | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
SecretKey | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
Metadata | spring.cloud.nacos.discovery.metadata | 无 | 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息 |
日志文件名 | spring.cloud.nacos.discovery.log-name | 无 | |
集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT | 配置成Nacos集群名称 |
接入点 | spring.cloud.nacos.discovery.enpoint | UTF-8 | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 |
是否集成Ribbon | ribbon.nacos.enabled | TRUE | 一般都设置成true即可 |
是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled | TRUE | 可以设置成false来关闭 watch |