SpringBoot2.x整合dubbo2.7.8 + nacos1.4.0

springboot安装:https://blog.neoniou.com/posts/spring-boot-nacos-dubbo/#service-consumer

================================

1、前言

今天在spring boot2.x下整合了一下dubbo2.7.8和nacos1.4.0,因为都是最新版,所以nacos和dubbo都有一些东西和网上的教程相比有所变化。

在写最新版的整合时,也会讲一下各个版本相对应的旧版的变化。

参考官方文档:

dubbo

nacos

2、安装 nacos注册中心

2.1 下载

下载:github release

我使用的版本是1.4.0,两个压缩包只是对应了不用的操作系统的压缩,内容是一样的,所以任意选一个下载即可

部分文件结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
nacos
├── bin
│   ├── shutdown.sh
│   ├── startup.sh
│   ├── startup.cmd
│   ├── shutdown.cmd
├── conf
│   ├── application.properties
│   ├── application.properties.example
│   ├── cluster.conf.example
│   ├── nacos-logback.xml
│   ├── nacos-mysql.sql
│   └── schema.sql

2.2 修改启动文件

因为新版nacos加入了cluster集群模式,而我们我目前只需要standalone单机模式,所以需要修改启动文件,不然每次都添加一个指令很麻烦

linux下修改startup.sh,windows下修改startup.cmd

windows:

1
set MODE="standalone"

linux:

1
export MODE="standalone"

2.3 配置数据库

nacos支持内置数据库,不过为了更方便管理,还是建立一个外部数据库比较好

在数据库中创建一个nacos相关的数据库,然后将 /conf/nacos-mysql.sql 文件执行即可

2.4 修改配置文件

配置文件:/conf/application.properties

1
2
3
4
5
6
7
8
#修改为你的数据的信息
spring.datasource.platform=mysql

db.num=1

db.url.0=jdbc:mysql://database-url:12345/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=nacos
db.password=nacos

2.5 启动nacos

windows下双击startup.cmd即可

linux下:

1
2
3
sh startup.sh
#ubuntu
bash startup.sh

根据提示的网址访问即可,默认的用户名和密码都是nacos

3、项目整合

我的整合demo: https://github.com/aowubulao/dubbo-demo

项目目录

common-api:接口提供包,普通mavne项目,用于提供接口类

service-consumer:dubbo消费者

service-provider:dubbo提供者

父类

父类用于提供依赖管理

pom文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <netty.version>4.1.56.Final</netty.version>
        <spring-boot.version>2.3.5.RELEASE</spring-boot.version>
        <dubbo.version>2.7.8</dubbo.version>
        <nacos-client.version>1.4.0</nacos-client.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>javax.servlet</groupId>
                        <artifactId>servlet-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

common-api模块

用于提供一个接口

SayService:

1
2
3
4
5
6
7
8
9
public interface SayService {

    /**
     * 根据名字say hello
     * @param name 名字
     * @return name + hello
     */
    String sayHelloByName(String name);
}

service-provider

SpringBoot项目,提供实例供consumer使用

pom:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-nacos</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
    </dependency>
    <dependency>
        <groupId>com.neoniou.demo</groupId>
        <artifactId>common-api</artifactId>
        <version>0.0.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

配置文件application.yaml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server:
  port: 14511
spring:
  application:
    name: provider-service
  main:
    allow-bean-definition-overriding: true
dubbo:
  application:
    name: provider-service
  registry:
    address: nacos://127.0.0.1:8848
    username: nacos
    password: nacos
  scan:
    base-packages: com.neoniou.provider.service.impl
  protocol:
    name: dubbo
    port: 15511

ProviderApplication.class:

1
2
3
4
5
6
7
8
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

SayServiceImpl.class:

关于这个地方,@DubboService是新版Dubbo的注解,如果是旧版比如2.7.3,使用的是org.apache.dubbo.config.annotation.Service这个注解

1
2
3
4
5
6
7
8
@DubboService
public class SayServiceImpl implements SayService {

    @Override
    public String sayHelloByName(String name) {
        return name + ",hello!";
    }
}

service-consumer

pom和启动类同provider

SayController:

同上,这里的@DubboReference是一个新版注解,老版本使用的是org.apache.dubbo.config.annotation.Reference

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
@RequestMapping("/demo/say")
public class SayController {

    @DubboReference
    private SayService sayService;

    @GetMapping("/sayHello")
    public ResponseEntity<String> sayHello(@RequestParam("name") String name) {
        return ResponseEntity.ok(sayService.sayHelloByName(name));
    }
}

4、项目启动

先启动provider,再启动consumer

可以在nacos控制面板中看到:

测试API:

至此,SpringBoot+nacos+dubbo的整合就结束了,关于dubbo的配置,不仅只有yaml配置方法,还有xml、注解、bean等很多方式,可以查阅官方文档进行更适合你自己项目的配置方式。

 

 

 

服务端git:

https://github.com/huangdan92/springboot-dubbo-provider

消费端git:

https://github.com/huangdan92/springboot-dubbo-consumer

posted @   larybird  阅读(413)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示