springboot项目注册到nacos使用dubbo互相调用例子
环境:
JDK:21
1.项目结构

这里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代码

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代码

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

hxl04消费者端启动后调用
http://127.0.0.1:8004/hello?name=World

浙公网安备 33010602011771号