朋也的博客 » 首页 » 文章
作者:朋也
日期:2019-01-10
类别:spring-boot学习笔记
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
我这里使用zookeeper作为服务注册中心,版本3.4.9,下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
下载后,解压
要先配置一下,否则没法启动,启动会报错,找不到 zoo.cfg
文件,其实这个配置文件是有的,在 conf
文件夹里,只不过名字是 zoo_sample.cfg
把名字改一下即可
windows是启动还有些问题,直接运行 zkServer.cmd
还不行,我电脑上还装了 git-bash ,所以直接打开 git-bash 进入 bin 目录,运行命令 ./zkServer.sh start
即可启动
停止命令是 ./zkServer.sh stop
既然是服务,肯定会有接口与一些共用的实体类,如果写在provider里,那么consumer消费的时候,也要再写一遍,所以先把这块提取出来,开发好后,打成jar包,让provider与consumer都引用即可实现共用
新建一个maven项目就可以了
定义一个接口,我这里模拟一下短信服务
public interface SmsService {
/**
* 定义一个发短信的接口
* @param mobile 手机号
* @param content 内容
* @param platform 平台,分别对应 LIANTONG, YIDONG, DIANXIN
* @return 正常返回发送成功,失败即可,这里为了展示发送的手机号与内容平台,直接把内容再返回去
*/
String sendSms(String mobile, String content, String platform);
}
写好之后,运行 mvn compile install
安装到本地
新建Springboot项目,引入依赖,我这Springboot使用的版本是2.x,所以这里的 starter 用的是 0.2.x 如果springboot版本是1.5.x 那么这个starter版本要使用0.1.x
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
另外还要引入上面开发好的接口jar包
<dependency>
<groupId>com.example</groupId>
<artifactId>interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
添加配置
找到 application.properties
将其修改成 application.yml
我比较喜欢yml配置文件,简洁,而且可以少写很多 : )
添加下面配置
dubbo:
application:
name: demo-provider # 服务名
registry:
address: zookeeper://127.0.0.1:2181 # 注册中心地址
protocol:
name: dubbo # 指定通信协议
port: 20880 # 通信端口 这里指的是与消费者间的通信协议与端口
provider:
timeout: 10000 # 配置全局调用服务超时时间,dubbo默认是1s,肯定不够用呀
retries: 3 # 重试3次
delay: -1
这里我碰到一个坑,就是这个超时时间问题,默认是1s,但我实现服务为了模拟效果,故意延时2s,这导致后面消费者端调用服务的时候一直报错
在服务提供者里实现服务
@Service
@Component
public class SmsServiceImpl implements SmsService {
@Override
public String sendSms(String mobile, String content, String platform) {
try {
Thread.sleep(2000);// 模拟调用短信接口费时2s
return String.format("发送结果: %s, 手机号: %s, 内容: %s, 平台: %s", "SUCCESS", mobile, content, platform);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
}
这个实现上有个注解 @Service
这个不是Spring包里的那个注解,而是dubbo里提供的注解,包名是 com.alibaba.dubbo.config.annotation.Service
这个注解的用处是暴露服务给消费端使用的,所以一定要加上
暴露了服务还不够,还要开启dubbo服务,在启动类上加上注解 @EnableDubbo
到这服务提供端就开发好了,启动服务即可
有了服务提供者了,还要有消费者,下面来开发消费者
首先创建一个springboot项目,这里就调用一下服务,不需要引入其它依赖,就默认什么都不选的一个springboot项目即可
然后跟提供者一样,引入依赖,跟服务端一样的依赖
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
添加配置
dubbo:
application:
name: demo-consumer # 消息者名字
registry:
address: zookeeper://127.0.0.1:2181 # 注册中心地址
调用服务,我这就直接写在test方法里了
@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerApplicationTests {
@Reference
private SmsService smsService;
@Test
public void contextLoads() {
String s = smsService.sendSms("13111111111", "hello world", "LIANTONG");
System.out.println(s);
}
}
运行test方法,结束可以看到打印出调用的结果
发送结果: SUCCESS, 手机号: 13111111111, 内容: hello world, 平台: LIANTONG
至此,springboot集成dubbo简单demo就开发完了