springboot项目注册到nacos使用dubbo互相调用例子

环境:

JDK:21

 

1.项目结构

image

 这里hxl03是服务提供者,hxl04是服务消费者

 

################################################hxl03服务提供者################################

1.pom.xml文件

<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>org.hxl03</groupId>
  <artifactId>hxl03</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hxl03</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

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

  <dependencies>


    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>3.2.0</version>
    </dependency>

    <!--    web依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>3.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-registry-nacos</artifactId>
      <version>3.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.testng</groupId>
      <artifactId>testng</artifactId>
      <version>RELEASE</version>
      <scope>test</scope>
    </dependency>


  </dependencies>

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

 

2.application.yml

server:
  port: 8003
spring:
  application:
    name: demo-provider
dubbo:
  application:
    name: demo-provider
  registry:
    ##address: nacos://192.168.1.134:8848?username=nacos&password=nacos
    address: nacos://192.168.1.134:8848
    username: nacos
    password: nacos
    ##register-mode: instance
  protocol:
    name: dubbo
    port: -1
  scan:
    base-packages: org.hxl03.provider
  ##metadata-type: remote

 

3.java代码

image

 

DemoService.java

package org.hxl03.api;

public interface DemoService {
    String sayHello(String name);
}

 

DemoServiceImpl.java

package org.hxl03.provider;

import org.hxl03.api.DemoService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService // 关键注解:声明这是一个Dubbo服务实现,并将此服务发布到注册中心
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name + "! (from Dubbo 3 Provider)";
    }
}

 

App.java

package org.hxl03;

/**
 * Hello world!
 *
 */
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


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

 

##########################################hxl04服务消费者###############################

1.pom.xml文件

<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>org.hxl04</groupId>
  <artifactId>hxl04</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>hxl04</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

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


  <dependencies>
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>3.2.0</version>
    </dependency>

    <!--    web依赖-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>3.2.0</version>
    </dependency>

    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-registry-nacos</artifactId>
      <version>3.2.0</version>
    </dependency>


    <dependency>
      <groupId>org.hxl03</groupId>
      <artifactId>hxl03</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>


  </dependencies>
</project>

 

红色部分是引入hxl03的项目

 

2.application.yml

server:
  port: 8004
spring:
  application:
    name: demo-consumer
dubbo:
  application:
    name: demo-consumer
  registry:
    ##address: nacos://192.168.1.134:8848?username=nacos&password=nacos
    address: nacos://192.168.1.134:8848
    username: nacos
    password: nacos
  protocol:
    name: dubbo
    port: -1
    ##register-mode: instance
  ##metadata-type: remote

 

3.java代码

image

 

ConsumerController.java

package org.hxl04.consumer;

import org.hxl03.api.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {

    // 关键注解:引用远程Dubbo服务
    // 注意:Dubbo 3.x 应用级服务发现通常不需要指定版本(version)
    @DubboReference
    private DemoService demoService;

    @GetMapping("/hello")
    public String sayHello(@RequestParam String name) {
        // 这个调用看起来是本地方法,但实际上是通过Dubbo发起的远程过程调用
        return demoService.sayHello(name);
    }
}

 

App.java

package org.hxl04;

/**
 * Hello world!
 *
 */
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

hxl03提供服务端启动后会发现注册到了nacos

image

 

hxl04消费者端启动后调用

http://127.0.0.1:8004/hello?name=World

image

 

 

posted @ 2025-11-27 16:20  slnngk  阅读(15)  评论(0)    收藏  举报