Dubbo 多协议配置

本文主要阐述,Dubbo 多协议、单协议多端口实现

环境

dubbo 2.6.5、2.7.0

dubbo-spring-boot-starter 0.2.0

多协议实现

在 application.yml 中添加如下配置

首先要开启多协议的配置开关,再通过 protocols 指定多协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dubbo:
config:
# 开启多个配置绑定
multiple: true
# 多协议配置
protocols:
dubbo:
name: dubbo
port: 20885
server: netty4
rest:
name: rest
port: 8080
server: netty
  • 开启了多协议之后,可以使用@Service(protocol = {"dubbo", "rest"})指定协议类型
  • 如果不需要多协议,也要明确指定其中一个协议@Service(protocol = {"dubbo"})
  • rest.server可以是servletjettytomcatnetty,这里以netty4为例

对比单协议的配置

1
2
3
4
5
> dubbo:
> protocol:
> name: dubbo
> port: 20885
>

如果是单协议配置,不能这样指定协议@Service(protocol = {"dubbo"}),否则会报错找不到dubbo compent

要在pom.xml引入 resteasy 的依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.0.26.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-netty4</artifactId>
<version>3.0.26.Final</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>

Dubbo Service 指定多个协议

1
2
3
4
5
6
7
@javax.ws.rs.Path("/user")
public interface UserService {

@javax.ws.rs.GET
@javax.ws.rs.Path("/say-hello")
public String sayHello(@javax.ws.rs.QueryParam("name") String name);
}

rest相关的PathGETPOST要在接口上配置

验证 rest 服务

1
2
$ curl http://localhost:8080/demo/say-hello?name=forever
Hello, forever!

单协议多端口实现

在 application.yml 中添加如下配置

首先要开启多协议的配置开关,再通过 protocols 指定多协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
dubbo:
config:
# 开启多个配置绑定
multiple: true
# 多协议配置
protocols:
dubbo:
name: dubbo
port: 20885
server: netty4
dubbo2:
name: dubbo
port: 20886
server: netty4

Dubbo Service 指定多个协议

1
2
3
4
5
6
7
8
9
10
11
12
import com.alibaba.dubbo.config.annotation.Service;

// @Service(
// protocol = {"dubbo", "dubbo2"}
// )
@Service
public class UserServiceImpl implements UserService {

public String sayHello(String name) {
return "Hello, " + name + "!";
}
}

@Service 不配置 protocol,默认使用所有协议

  • 本文作者: forever杨
  • 本文链接: https://blog.yl-online.top/posts/90506ac1.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。如果文章内容对你有用,请记录到你的笔记中。本博客站点随时会停止服务,请不要收藏、转载!