1.添加dubbo-spring-boot-starter依赖
<!-- dubbo依赖 --> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
2.添加zookeeper依赖
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency>
3.添加zkclient依赖
<dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
4.新建个普通的java工程,用来定义服务(API接口),如下:
package com.example.dubboTestApi.api; public interface SayHelloApi { String say(String name); }
5.新建一个springboot类型的服务实现工程,具体见springboot创建功能文章
6.配置文件修改:
#WEB服务端口
server.port=8081
## dubbo 配置
spring.dubbo.application.id=live-dubbo-provider
spring.dubbo.application.name=live-dubbo-provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
7.启动类修改,增加@EnableDubboConfiguration注解
@EnableDubboConfiguration @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
8.服务实现,先添加API接口依赖
<dependency> <groupId>com.example.dubboTestApi</groupId> <artifactId>dubboTestApi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
注意这里加了一个retries = 0,默认情况下超时时dubbo会自动重掉三次,这样的重复调用很容易导致一些问题,所以这里用retries = 0来关闭超时重试功能。
@Service(interfaceClass = SayHelloApi.class,retries = 0) @Component public class SayHelloApiService implements SayHelloApi{ @Override public String say(String name) { if(StringUtils.isBlank(name)){ return "error,name is blank"; } return name + ",hello dubbo api"; } }
9.新建一个springboot类型的服务调用工程,具体见springboot创建功能文章
10.添加dubbo,zookeeper,zkclient相关依赖。
11.配置文件修改
## WEB服务端口
server.port=8082
## Dubbo 配置
spring.dubbo.application.name=live-dubbo-consumer
spring.dubbo.application.id=live-dubbo-consumer
spring.dubbo.protocol.port=20800
spring.dubbo.protocol.name=dubbo
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
12.修改启类:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; @EnableDubboConfiguration @SpringBootApplication public class DubboConsumerTestApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerTestApplication.class, args); } }
13.添加api接口依赖
<dependency> <groupId>com.example.dubboTestApi</groupId> <artifactId>dubboTestApi</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
14.创建使用api例子
import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Reference; import com.example.dubboTestApi.api.SayHelloApi; @Component public class DubboConsumerTest { @Reference private SayHelloApi sayHelloApi; public String testSay(){ System.out.println(sayHelloApi.say("dubbo")); return "dubbo test success"; } }
15.另外,为了便于理解,上面分成三个项目,API定义,服务提供,服务消费 。但是一个应用,既可以提供服务,也可以调用其他项目提供的服务。,一般也是这样的情况。
16.注意事项
默认情况下,服务端没启动,消费端是不能启动的。可以配置一下让消费端启动的时候不去检查服务是否存在。
spring.dubbo.reference.check=false
另外,dubbo默认超时会重试两次,这样的重试有时会产生很大问题,所以建议关闭。关闭有两种方式:
在服务上加注解:
@Service(interfaceClass = AccountUpdateApi.class,retries = -1)
注意这里重试次数写成-1,经测试,dubbo版本(2.6.0)写成0无效。
另一种方式,配置文件:
spring.dubbo.provider.retries=-1
17.安装dubbo admin后(安装非常简单,直接将war包放在tomcat下运行即可),可以在页面查看服务情况
需要项目代码,可以发邮件zhuyuehua110@163.com