【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目

这篇具有很好参考价值的文章主要介绍了【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在springboot3不再兼容jdk8的时候,随之而来的便是各种框架不兼容引发的bug,虽然各位框架的开发大佬在加班加点的更新适配,但能够创建一个适用并且不报错的项目依旧是一件耗时耗力的事情。
我们都知道在String Cloud项目中默认使用Feign组件进行服务间的通信,REST API的调用方式使用起来十分的优雅、简洁,但通常情况下HTTP这种通信机制都是短连接,也就意味着每一次调用都是一次TCP连接的建立。无疑,这种方式的开销以及效率都有不小的问题。在对外部系统时使用REST API的方式去调用是个好方法,但在内部服务之间的调用中就会显得开销很大,所以,我们可以在内部服务之间使用RPC调用。

1、项目结构

【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
在该demo中主要有以上四个项目:
parent: 父项目,所有依赖的管理包,在该项目的开发中,我们将所有的依赖以及依赖的版本都描述在parent项目中,在实际不同模块的开发中,我们只需要引入parent包,便可以在从中添加依赖而不再去关注依赖的版本。
provider: 服务提供方,用来提供服务的一方。
consumer: 服务消费方,负责消费服务。
common: 抽离出来的共组模块。在该模块中定义我们要调用的接口以及涉及到的entity、vo、dto等类,同时也可定义一些公用的工具类、枚举类等等

2、搭建nacos注册中心、配置中心

此处不过多详细描述,下载并安装配置nacos即可

3、项目依赖

项目中的所有依赖都在parent项目中进行管理,所以我们这里先看parent的pom文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.fawu</groupId>
  <artifactId>parent</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.0.4</version>
  </parent>

  <properties>
    <java.version>17</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>3.0.4</spring-boot.version>
    <spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
    <spring-cloud.version>2022.0.0</spring-cloud.version>
    <dubbo.version>3.3.0-beta.1</dubbo.version>
    <mybatis-plus.version>3.5.1</mybatis-plus.version>
    <druid.version>1.2.8</druid.version>
    <mapstruct.version>1.4.1.Final</mapstruct.version>
    <hutool.version>5.8.20</hutool.version>
    <lombok.version>1.18.26</lombok.version>
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
    <maven-surefire-plugin.version>3.1.2</maven-surefire-plugin.version>
    <spring-cloud-bootstrap.version>4.0.3</spring-cloud-bootstrap.version>
    <poi.version>4.1.2</poi.version>
    <fastjson.version>2.0.32</fastjson.version>
    <commons-i3o.version>1.3.2</commons-i3o.version>
  </properties>
  <dependencyManagement>
    <!-- SpringBoot 依赖配置 -->
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- SpringCloud 微服务 -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- SpringCloud Alibaba 微服务 -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>${spring-cloud-bootstrap.version}</version>
      </dependency>
      <!-- dubbo -->
      <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
      </dependency>

      <!-- Alibaba Spring Context extension -->
      <dependency>
        <groupId>com.alibaba.spring</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>1.0.11</version>
      </dependency>


      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>${mybatis-plus.version}</version>
      </dependency>
      <!-- 数据库连接池 -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <!-- mapstruct 对象拷贝-->
      <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${mapstruct.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok-mapstruct-binding</artifactId>
        <version>${lombok-mapstruct-binding.version}</version>
      </dependency>
      <dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>${hutool.version}</version>
      </dependency>
      <!-- excel工具 -->
      <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>${poi.version}</version>
      </dependency>
      <!-- fastjson -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>${fastjson.version}</version>
      </dependency>
      <!-- common io -->
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-io</artifactId>
        <version>${commons-io.version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <mainClass>none</mainClass>     <!-- 取消查找本项目下的Main方法:为了解决Unable to find main class的问题 -->
          <classifier>execute</classifier>    <!-- 为了解决依赖模块找不到此模块中的类或属性 -->
        </configuration>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>


</project>

【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
其中的主要依赖为上图所示,依赖版本都是Springboot3.x之后适配的版本。

4、common模块

在该模块中我们需要配置需要调用的接口。首先来看一下他的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.fawu</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>common</name>
    <description>common</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

我们可以看到在pom文件的开头有如下配置:

    <parent>
        <groupId>com.fawu</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

进行该配置后即可引用parent管理的依赖版本,不需要再去关注依赖的版本了。其余的便是常规的一些依赖。
然后便是需要在该项目中创建在服务消费者中调用,在服务提供者中实现的接口:

public interface UserService {

    /**
     * 测试登录接口
     * @param username
     * @return
     */
    String login(String username);
}

5、provider服务提供者

该模块用来提供服务,也就是实现在common模块中提出的login接口。

pom文件

照例先看一下pom文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>com.fawu</groupId>
		<artifactId>parent</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

	<artifactId>Provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>ProviderDemo</name>
	<description>服务提供者</description>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>com.fawu</groupId>
			<artifactId>common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-bootstrap</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.dubbo</groupId>
			<artifactId>dubbo</artifactId>
		</dependency>

		<!-- Alibaba Spring Context extension -->
		<dependency>
			<groupId>com.alibaba.spring</groupId>
			<artifactId>spring-context-support</artifactId>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

我们可以看到在该项目中引入了spring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-alibaba-nacos-configspring-cloud-starter-bootstrapdubbo依赖。
其中spring-cloud-starter-alibaba-nacos-discovery是使用nacos作为注册中心的依赖,spring-cloud-starter-alibaba-nacos-config是使用nacos作为配置中心的依赖,spring-cloud-starter-bootstrap为配置读取bootstrap配置的依赖,dubbo即为使用RPC进行通讯的依赖。

bootstrap.yml

接下来对模块进行配置,创建bootstrap.yml文件


server:
  port: 8087
spring:
  application:
    name: providerDemo
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        enabled: true
        register-enabled: true
        namespace: demo
        group: DEFAULT_GROUP
      config:
        server-addr: 127.0.0.1:8848
        extension-configs[0]:
          data-id: providerDemo.yaml
          group: DEFAULT_GROUP
          refresh: true
        file-extension: yml
        namespace: demo
        group: DEFAULT_GROUP

我们可以看到在该配置中配置了端口号,配置了nacos作为注册中心时的地址以及命名空间、分组,配置了nacos作为配置中心的地址以及要加载的配置的dataId、分组。

在nacos中添加配置

此时我们打开nacos的地址
http://127.0.0.1:8848/nacos/index.html
1)、创建命名空间
选择命名空间
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
点击新建命名空间
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
创建demo命名空间
2)、添加配置
打开配置管理/配置列表,选择我们刚刚创建的demo的空间,点击创建配置。
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
创建providerDemo.yaml配置,配置内容如下:

spring:
  # 前后端传输时间相差8小时问题
  jackson:
    time-zone:
      GMT+8
    date-format:
      yyyy-MM-dd HH:mm:ss
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/bot?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&            useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&serverTimezone=Asia/Shanghai
    username: root
    password: root

  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    password: 
    # 连接超时时间(毫秒)
    timeout: 3000

mybatis:
  configuration:
    cache-enabled: false
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapping/**/*Mapper.xml
  type-aliases-package: com.onlyoa.common.entity

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
  page-size-zero: true

dubbo:
  cloud:
    subscribed-services: consumerDemo
  scan:
    #指定 Dubbo 服务实现类的扫描基准包
    base-packages: com.fawu 
  protocol:
    #使用dubbo协议
    name: dubbo 
    # port 为协议端口( -1 表示自增端口,从 20880 开始)
    port: -1 
  registry:
    #配置中心nacos地址
    address: nacos://127.0.0.1:8848 
  config-center:
    namespace: demo
  consumer:
    timeout: 300000


user:
    test:
        userId: 123456

我们可以看到在该配置中和我们常规springboot项目中的配置文件基本相似,只是多了一个dubbo的配置项。

启动类

@SpringBootApplication
@EnableDubbo
@EnableDiscoveryClient
public class ProviderDemoApplication {

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

}

我们可以看到启动类上多出了@EnableDubbo@EnableDiscoveryClient两个注解,顾名思义,一个为dubbo的配置注解,一个为注册中心的配置注解。

UserServiceImpl

终于到了服务的实现了,在该模块中我们引入了

		<dependency>
			<groupId>com.fawu</groupId>
			<artifactId>common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

也就是我们在前面所编写的仅有一个接口的common模块。接下来我们来实现该接口。

import com.fawu.common.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Value;

/**
 * 用户服务层实现
 *
 * @author <a href="https://github.com/fawu-K">fawu.K</a>
 * @since 2024-03-16 14:44
 **/

@DubboService
public class UserServiceImpl implements UserService {
    @Value("${user.test.userId}")
    private String userId;

    @Override
    public String login(String username) {
        if (userId.equals(username)) {
            return "账号正确!";
        } else {
            return "账号错误!";
        }
    }
}

需要注意,在该类上添加了@DubboService注解,该注解表明了这是一个dubbo服务,即可以通过RPC进行调用的服务。

consumer服务消费者

pom文件

照例,看一下pom文件吧

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.fawu</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ConsumerDemo</name>
    <description>服务消费者</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.fawu</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

可以看到该依赖和服务提供者的依赖一致,所以从此刻我们就能明白,一个模块既可以是服务提供者也可以是服务消费者。

bootstrap.yml

server:
  port: 7777
spring:
  application:
    name: consumerDemo
  cloud:
    nacos:
      discovery:
        server-addr: http://127.0.0.1:8848/
        enabled: true
        register-enabled: true
        namespace: demo
        group: DEFAULT_GROUP
      config:
        server-addr: 127.0.0.1:8848
        extension-configs[0]:
          data-id: consumerDemo.yaml
          group: DEFAULT_GROUP
          refresh: true
        file-extension: yml
        namespace: demo
        group: DEFAULT_GROUP

此配置依旧和服务提供者的配置基本相同,只有配置的data-id不同

nacos配置

打开nacos网址创建配置
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
配置内容:

spring:
  # 前后端传输时间相差8小时问题
  jackson:
    time-zone:
      GMT+8
    date-format:
      yyyy-MM-dd HH:mm:ss

  servlet:
    multipart:
      max-file-size: 100MB
      max-request-size: 100MB
      
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/bot?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&            useSSL=false&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&serverTimezone=Asia/Shanghai
    username: root
    password: root

  redis:
    # Redis数据库索引(默认为0)
    database: 0
    # Redis服务器地址
    host: 127.0.0.1
    # Redis服务器连接端口
    port: 6379
    # Redis服务器连接密码(默认为空)
    password: 
    # 连接超时时间(毫秒)
    timeout: 3000

  cloud:
    sentinel:
      transport:
        #配置Sentinel dashboard地址
        dashboard: 127.0.0.1:8848
        #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直到找到未被占用的端口
        port: 8719
      datasource:
        dsl:
          nacos:
            server-addr: 127.0.0.1:8848 #配置中心nacos地址
            namespace: demo #配置nacos地址
            dataId: onlyone-consumer-sentinel
            groupId: SENTINEL_GROUP
            data-type: json
            rule-type: flow

dubbo:
  registry:
    #配置中心nacos地址
    address: nacos://127.0.0.1:8848 
  scan:
    #指定 Dubbo 服务实现类的扫描基准包
    base-packages: com.fawu
  cloud:
    subscribed-services: providerDemo
  application:
    qos-enable: false
    name: consumerDemo
  config-center:
    namespace: demo
  protocol:
    #使用dubbo协议
    name: dubbo 
    # port 为协议端口( -1 表示自增端口,从 20880 开始)
    port: -1 
  consumer:
    timeout: 300000

mybatis:
  configuration:
    cache-enabled: false
    map-underscore-to-camel-case: true
  mapper-locations: classpath:mapping/**/*Mapper.xml
  type-aliases-package: com.onlyoa.common.entity

sftp:
  # 服务器地址
  host: 127.0.0.1
  # 端口
  port: 22
  # 账号
  userName: root
  # 密码
  password: root
  # 图片的根路径
  basePath: /home/nginx/image
  # 音频的根路径
  audioPath: /home/nginx/audio
  # 视频的根路径
  videoPath: /home/nginx/video
  # channel连接超时时间
  timeout: 30000
  #连接次数
  count: 3
  #休眠时间
  sleepTime: 6000
  #服务器头像地址
  titleImgsPath: http://127.0.0.1:80/image/
  #服务器音频地址
  titleAudiosPath: http://127.0.0.1:80/audio/
  #服务器视频地址
  titleVideosPath: http://127.0.0.1:80/video/

启动类

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
@EnableDubbo
public class ConsumerDemoApplication {

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

}

UserController

import com.fawu.common.service.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户控制层
 *
 * @author <a href="https://github.com/fawu-K">fawu.K</a>
 * @since 2024-03-16 14:47
 **/
@RestController
public class UserController {
    @DubboReference
    private UserService userService;

    @GetMapping("login")
    public String login(String username) {
        return userService.login(username);
    }
}

对于使用dubboRPC调用的服务使用@DubboReference注解进行调用。

测试

http://127.0.0.1:7777/login?username=123456
此时我们调用login接口,就会看到如下内容:
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java
当然了也可以是改一下username:
【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目,spring boot,后端,java文章来源地址https://www.toymoban.com/news/detail-842414.html

END

到了这里,关于【Spring Boot 3】整合nacos + Dubbo3 的Spring cloud Alibaba项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及与各中间件集成

    Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及与各中间件集成

    目录 前言 源码地址 官方中文文档 使用版本 spring Spring Boot 3.1.0 中间件 使用到的组件与功能 环境安装 虚拟机 nexus nacos 集成过程 工程搭建 父工程搭建 子工程 服务集成 nacos集成 配置文件 服务注册与发现-discovery 服务注册 启动 服务发现 测试 配置管理-config 新增配置  测试

    2024年02月07日
    浏览(17)
  • 【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

    【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

    本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重要。在选择Spring Boot和Spring Cloud版本时,需要考虑到两者之间的关系以及项目的具体需求。 首先,Spring Boot和Spring Cloud有密切

    2024年02月08日
    浏览(48)
  • Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及与各中间件集成
Sleuth+Zipkin集成分布式链路追踪

    Spring Cloud Alibaba 最新版本(基于Spring Boot 3.1.0)整合完整使用及与各中间件集成 Sleuth+Zipkin集成分布式链路追踪

    目录 前言 源码地址 官方中文文档 使用版本 spring Spring Boot 3.1.0 中间件 使用到的组件与功能 环境安装 虚拟机 nexus nacos 集成过程 工程搭建 父工程搭建 子工程 服务集成 nacos集成 配置文件 服务注册与发现-discovery 服务注册 启动 服务发现 测试 配置管理-config 新增配置  测试

    2024年02月12日
    浏览(43)
  • Spring Cloud Alibaba 同时兼容dubbo与openfeign

    dubbo与springcloud都可以单独作为微服务治理框架在生产中进行使用,但使用过springcloud的同学大概了解到,springcloud生态的相关组件这些年已经逐步停更,这就导致在服务架构演进过程中的迭代断层,以至于一些新的技术组件引入困难重重,于是在国内的市场上就有了升级版的

    2024年02月07日
    浏览(10)
  • Spring Cloud Alibaba nacos配置中心

    Spring Cloud Alibaba nacos配置中心

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 第九章 代码管理gitlab 使用 第十章 Spr

    2024年02月08日
    浏览(48)
  • Spring Cloud Alibaba Nacos 构建配置中心

    Spring Cloud Alibaba Nacos 构建配置中心

    登录 Nacos 面板,依次点击左侧菜单栏【命名空间→新建命名空间】、填写命名空间名和描述信息,点击【确定】: 依次点击左侧菜单栏【配置管理→配置列表】、切换到指定命名空间【此处为 shop】、点击右侧【+】号: 添加配置 填写【Data ID】要求组内唯一,【Group】组名,

    2024年02月08日
    浏览(43)
  • Spring Cloud Alibaba【OpenFeign实现服务降级、Dubbo实现服务生产者、 Dubbo消费者调用接口 】(三)

    Spring Cloud Alibaba【OpenFeign实现服务降级、Dubbo实现服务生产者、 Dubbo消费者调用接口 】(三)

    目录 服务调用_OpenFeign实现服务降级 服务调用_Dubbo实现服务生产者 

    2024年02月17日
    浏览(18)
  • Spring Cloud Alibaba - 服务注册与发现(Nacos)

    ✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。 🍎个人主页:Hhzzy99 🍊个人信条:坚持就是胜利! 💞当前专栏:微服务 🥭本文内容:Spring Cloud Alibaba - 服务注册与发现(Nacos)。 在微服务架构中,服务注册与发现是其中的重要一环。服务

    2024年02月07日
    浏览(115)
  • Spring Cloud Alibaba--Nacos服务注册和配置中心

    Spring Cloud Alibaba--Nacos服务注册和配置中心

    Nacos 是Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos的特性,官网解释如下: 服务发现和服务健康监测 Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Age

    2024年02月05日
    浏览(41)
  • Spring Cloud Alibaba Nacos(服务注册及配置中心)

    Nacos是由阿里巴巴提供的一款专门构建云本地应用的 动态服务发现、配置中心和服务管理平台 。 在Spring Cloud Alibaba中常使用Nacos作为注册中心和分布式配置中心。  (1)服务发现和管理 动态服务发现是以服务为中心(例如微服务或云原生)体系结构的关键。Nacos支持基于DN

    2024年02月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包