Spring Cloud Alibaba和Dubbo融合实现

2025-05-29 0 65

服务提供者

创建一个名为 hello-dubbo-nacos-provider 的服务提供者项目

POM

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20
<?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>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.6.RELEASE</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>com.antoniopeng</groupId>

<artifactId>hello-dubbo-nacos-provider</artifactId>

<packaging>pom</packaging>

<modules>

<module>hello-dubbo-nacos-provider-api</module>

<module>hello-dubbo-nacos-provider-service</module>

</modules>

</project>

该项目下有两个子模块,分别是 hello-dubbo-nacos-provider-api 和 hello-dubbo-nacos-provider-service,前者用于定义接口,后者用于实现接口。

服务提供者接口模块

在服务提供者项目下创建一个名为 hello-dubbo-nacos-provider-api 的模块, 该项目模块只负责 定义接口

POM

?

1

2

3

4

5

6

7

8

9

10

11

12

13
<?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>

<parent>

<groupId>com.antoniopeng</groupId>

<artifactId>hello-dubbo-nacos-provider</artifactId>

<version>0.0.1-SNAPSHOT</version>

</parent>

<artifactId>hello-dubbo-nacos-provider-api</artifactId>

<packaging>jar</packaging>

</project>

定义一个接口

?

1

2

3
public interface EchoService {

String echo(String string);

}

服务提供者接口实现模块

创建名为 hello-dubbo-nacos-provider-service 服务提供者接口的实现模块,用于实现在接口模块中定义的接口。

引入依赖

在 pom.xml 中主要添加以下依赖

?

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
<!-- Nacos And Dubbo-->

<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-serialization-kryo</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo-registry-nacos</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.nacos</groupId>

<artifactId>nacos-client</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.spring</groupId>

<artifactId>spring-context-support</artifactId>

</dependency>

<!-- 依赖接口模块,用于实现接口 -->

<dependency>

<groupId>com.antoniopeng</groupId>

<artifactId>hello-dubbo-nacos-provider-api</artifactId>

<version>${project.parent.version}</version>

</dependency>

相关配置

在 application.yml 中加入相关配置

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21
spring:

application:

name: dubbo-nacos-provider

main:

allow-bean-definition-overriding: true

dubbo:

scan:

# 接口扫描路径

base-packages: com.antoniopeng.hello.dubbo.nacos.provider.service

protocol:

name: dubbo

# -1 代表自动分配端口

port: -1

# 配置高速序列化规则

serialization: kryo

registry:

# 服务注册地址,也就是 Nacos 的服务器地址

address: nacos://192.168.127.132:8848

provider:

# 配置负载均衡策略(轮询)

loadbalance: roundrobin

附:Duubo 负载均衡策略

  • random:随机
  • roundrobin:轮询
  • leastactive:最少活跃数
  • consistenthash:一致性 Hash

实现接口

通过 org.apache.dubbo.config.annotation 包下的 @Service 注解将接口暴露出去

?

1

2

3

4

5

6

7

8

9

10

11
import com.antoniopeng.hello.dubbo.nacos.provider.api.EchoService;

import org.apache.dubbo.config.annotation.Service;

@Service(version = "1.0.0")

public class EchoServiceImpl implements EchoService {

@Override

public String echo(String string) {

return "Echo Hello Dubbo " + string;

}

}

注意:@Service 注解要注明 version 属性

验证是否成功

启动项目,通过浏览器访问Nacos Server 网址 http://192.168.127.132:8848/nacos ,会发现有一个服务已经注册在服务列表中。

服务消费者

创建一个名为 hello-dubbo-nacos-consumer 的服务消费者项目

引入依赖

同样在 pom.xml中添加以下主要依赖

?

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
<!-- Nacos And Dubbo -->

<dependency>

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

<artifactId>dubbo-spring-boot-starter</artifactId>

</dependency>

<dependency>

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

<artifactId>dubbo-serialization-kryo</artifactId>

</dependency>

<dependency>

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

<artifactId>dubbo-spring-boot-actuator</artifactId>

</dependency>

<dependency>

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

<artifactId>dubbo</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo-registry-nacos</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.nacos</groupId>

<artifactId>nacos-client</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.spring</groupId>

<artifactId>spring-context-support</artifactId>

</dependency>

<!-- 依赖服务提供者接口模块,用于调用接口 -->

<dependency>

<groupId>com.antoniopeng</groupId>

<artifactId>hello-dubbo-nacos-provider-api</artifactId>

<version>${project.parent.version}</version>

</dependency>

相关配置

在 application.yml 中添加以下配置

?

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
spring:

application:

name: dubbo-nacos-consumer

main:

allow-bean-definition-overriding: true

dubbo:

scan:

# 配置 Controller 扫描路径

base-packages: com.antoniopeng.dubbo.nacos.consumer.controller

protocol:

name: dubbo

port: -1

registry:

address: nacos://192.168.127.132:8848

server:

port: 8080

# 服务监控检查

endpoints:

dubbo:

enabled: true

management:

health:

dubbo:

status:

defaults: memory

extras: threadpool

endpoints:

web:

exposure:

include: "*"

Controller

通过 org.apache.dubbo.config.annotation 包下的 @Reference 注解以 RPC 通信的方式调用服务,而对外提供以 HTTP 通信的方式的 Restful API

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17
import com.antoniopeng.dubbo.nacos.provider.api.EchoService;

import org.apache.dubbo.config.annotation.Reference;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class EchoController {

@Reference(version = "1.0.0")

private EchoService echoService;

@GetMapping(value = "/echo/{string}")

public String echo(@PathVariable String string) {

return echoService.echo(string);

}

}

验证是否成功

通过浏览器访问 Nacos Server 网址 http:192.168.127.132:8848/nacos ,会发现又多了一个服务在服务列表中。

然后再访问服务消费者对外提供的 RESTful API http://localhost:8080/echo/hi,浏览器会响应以下内容:

Echo Hello Dubbo hi

到此,实现了 Nacos 与 Dubbo 的融合。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:https://www.cnblogs.com/antoniopeng/p/12687715.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Spring Cloud Alibaba和Dubbo融合实现 https://www.kuaiidc.com/104774.html

相关文章

发表评论
暂无评论