spring boot 整合 Apache dubbo
网上有很多关于dubbo的搭建方式,但是有很多都不是官方的,而且配置方式都是五花八门的,使用的dubbo 也不是apache的。还不全,
反正我是搭建不起来的。
最后之后求助官方的文档,所以以下写的内容都是依赖于apache dubbo和apache dubbo-spring-boot-project的
具体的依赖jar包都是在文末
具体代码其实很简单,但是这个过程中会有一些坑,在此记录一下
刚才说了代码很简单无非就是给三个模块consumer、producer、api,api模块专门写接口,
producer模块实现api模块的接口,使用@Service注册这个接口,需要注意的是@Service是dubbo中的@Service而不是spring中的
consumer模块依赖于api中的接口,也就是调用api中的接口,需要使用@Reference指定注册的接口
具体代码补贴出来了,地址在文末,有兴趣的可以看看
provider
在application.properties中有如下配置,注明dubbo可以使用两种RPC 协议
dubbo.protocols.dubbo.name = dubbo
dubbo.protocols.dubbo.port = 20880
dubbo.protocols.rest.name = rest
dubbo.protocols.rest.port = 8091
producer模块中如果使用rest
协议,那么就需要引入相关的jar包,包括两方面,一方面rest接口的,一方面是rest服务器,
rest接口依赖
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>${resteasy_version}</version>
</dependency>
dubbo.protocol.server 如果不配置使用的是jetty服务器,需要引入相关jar包
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty_version}</version>
</dependency>
否则会报java.lang.NoClassDefFoundError: org/eclipse/jetty/util/log/StdErrLog
这个异常
dubbo.protocol.server=netty 则需要引入netty的jar包
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-netty4</artifactId>
<version>${resteasy_version}</version>
</dependency>
否则会报java.lang.NoClassDefFoundError: org/jboss/resteasy/plugins/server/netty/NettyJaxrsServer
这个异常
dubbo.protocol.server=tomcat 则需要引入tomcat相关依赖,好吧,其实rest使用tomcat这种方式我是没有试成功,
如果Spring boot 也是用的是tomcat服务器,除非Spring boot使用的其他服务器才能成功启动
<properties>
<tomcat_embed_version>9.0.22</tomcat_embed_version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId