微服务-nacos-dubbo(推荐)

1,563 阅读3分钟

问题:

Dubbo和Springcloud一般都是分开的。
把Dubbo整合到SpringCloud系列中去。
使用Springcloud系列的时候。希望用Dubbo来做服务管理(因为dubbo这方面很优秀)

原理:

使用SpringcloudAlibaba整合dubbo

文档:

nacos官方文档: https://nacos.io/zh-cn/docs/quick-start.html
dubbo官方文档:  http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
SpringCloudAlibaba地址: https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

步骤

关于下载和启动nacos就先看这个 https://juejin.cn/user/4001878054538839 的1-2步
1.搭建一个普通的maven项目(api)
2.搭建一个提供者项目整合nacos和dubbo(provider)(2,4一样)
3.编写配置文件和测试相关代码
4.搭建一个消费者项目整合nacos和dubbo(consumer)(2,4一样)
5.编写配置文件和测试相关代码

1.搭建一个普通的maven项目(api)

并写一个简单的接口和方法

2.搭建一个提供者项目整合nacos和dubbo(provider)

1.注意springBoot的版本。这里用2.0.5.RELEASE

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

2.引入Springcloud和SpringcloudAlibaba注意对应的版本。

    <dependencyManagement>
        <dependencies>
            <!--F版本-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringCloudAlibaba还没正式归入到cloud版本里面去,所以需要额外添加-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.0.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.引入dubbo和nacos

    <!--nacos-->
    <dependency>
         <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--dubbo-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>

4.引入api

<!--上面定定义好的api项目-->
<dependency>
    <groupId>com.dripy</groupId>
    <artifactId>nacos-dubbo-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

3.编写配置文件和测试相关代码

1.配置文件填写项目相关信息、nacos地址、dubbo的注册中心地址

spring.application.name=nacos-dubbo-provider
server.port=9870
# 注册中心nacos地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# dubbo的配置
# 扫描路径。别混乱了。。
dubbo.scan.base-packages=com.dripy.nacosdubboprovider.model
# 使用Springcloud的注册中心
dubbo.registry.address=spring-cloud://localhost
# 防止dubbo协议端口冲突
dubbo.protocol.port=-1

2.启用nacos注册发现

启动类添加
@EnableDiscoveryClient注解

3.编写测试实例

    实现步骤1里面的接口。
    并使用@Service注解。注意是Dubbo的注解,不是Spring的。
    org.apache.dubbo.config.annotation

4.搭建一个消费者项目整合nacos和dubbo(consumer)

    和步骤2一模一样

5.编写配置文件和测试相关代码

1.配置文件填写项目相关信息、nacos地址、dubbo的注册中心地址

spring.application.name=nacos-dubbo-consumer
server.port=9871

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# dubbo相关
# 使用Srpingcloud的注册中心
dubbo.registry.address=spring-cloud://localhost
# 扫描路径。别混乱了。。
dubbo.scan.base-packages=com.dripy.nacosdubboconsume.controller
# 这里比消费者多了一个属性 服务提供者的名称。用于定于那个服务 spring.application.name 
dubbo.cloud.subscribed-services=nacos-dubbo-provider

2.启用nacos注册发现

启动类添加
@EnableDiscoveryClient注解

3.编写测试实例

    编写一个测试接口,
    使用@Reference注入接口。注意是Dubbo的注解,不是Spring的。

4.测试

总结:

1. @Service,@Reference这两个路径别写错了。这是dubbo的属性。
2.jar包的groupId别写错了。因为alibaba的版本不一样,引用的也不一样。
3.dubbo扫描路径写对,不要写错了,否者会注册不了服务。
其他应该就没了。遇到问题,从头捋一遍,看看漏了什么没有。

项目整体结构图: