以前用spring单独整合过Dubbo+zookeeper,因为用springboot已经好长时间,而且配置也方便,想着重新用springboot整合下Dubbo+zookeeper;各种心酸,因为一个注解的问题导致消费者无法注册到Dubbo中,心累!后面会提到的。
1.zookeeper安装
下载地址:
链接:https://pan.baidu.com/s/1dukbp2Ld54Mqtnt9F6Igyw
提取码:o8e6
a)下载完了后,解压出来,到\apache-zookeeper-3.6.0-bin\conf目录下,将zoo_sample.cfg文件复制一份改一个名字:zoo.cfg
b)修改zoo.cfg文件,主要修改的是下面两个目录,需要到对应的路径下创建目录哦
c)启动。切换到apache-zookeeper-3.6.0-bin\bin目录下,双击zkServer.cmd启动就Ok了
2.dubbo安装
下载地址:
链接:https://pan.baidu.com/s/193xCvde4clGJRXShTP14mg
提取码:x9rt
a)下载完后了之后解压,然后切换到dubbo-admin目录下,打开命令行,输入:mvn clean install,然后会在target目录产生一个war包,将产生的war包放入tomcat的webapps目录下,然后到tomcat的bin目录下执行startup.bat启动tomcat(我的tomcat默认端口为8080,启动时一直提示端口本占用,可以把tomcat的端口号换一个,我换的8081)
b)启动成功后就可以在浏览器访问dubbo可是页面了,登录用户和密码:root/root
1.先创建一个父项目dubbo-parent,然后引入依赖
org.springframework.boot
spring-boot-starter-web
2.0.0.RELEASE
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
org.apache.zookeeper
zookeeper
3.4.8
com.101tec
zkclient
0.10
2.创建一个公共的api接口工程:common-api,然后创建一个HelloService接口
public interface HelloService {
public String sayHello(String message);
}
3.创建一个服务提供者工程:server-provider,然后引入common-api工程,实现common-api的中HelloService接口
@Service(interfaceClass = HelloService.class)
public class HelloServiceImpl implements HelloService {
public String sayHello(String message) {
return "hello:"+message;
}
}
这个地方的@Service是Dubbo框架中的注解,然后需要指明接口
配置文件的配置如下:
server:
port: 9001
dubbo:
application:
# 服务名称,保持唯一
name: server-provider
# zookeeper地址,用于向其注册服务
registry:
protocal: zookeeper
address: zookeeper://127.0.0.1:2181
#address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
protocol:
name: dubbo
port: 20880
scan: com.pyh.provider.service
启动类:
@EnableDubbo
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
System.out.println("=============start============");
SpringApplication.run(MainApplication.class,args);
System.out.println("=============end============");
}
}
4.创建一个服务消费者工程:server-consumer,然后引入commin-api工程,然后创建一个控制器
@RestController
public class HelloController {
@com.alibaba.dubbo.config.annotation.Reference
private HelloService helloService;
@RequestMapping("sayHello")
public String sayHello(String message){
return helloService.sayHello(message);
}
}
这个地方需要注意下,一定要使用dubbo的@reference注解,不然消费者就不能注册到dubbo中,我在这个地方折腾了好久,人都快崩溃了,切记,切记,切记!
配置文件:
server:
port: 9002
dubbo:
application:
name: server-consumer
registry:
protocol: zookeeper
address: zookeeper://127.0.0.1:2181
#address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
scan:
base-packages: com.pyh.consumer
启动类:
@SpringBootApplication
@EnableDubboConfig
public class MainApplication {
public static void main(String[] args) {
System.out.println("=============start===============");
SpringApplication.run(MainApplication.class,args);
System.out.println("=============end===============");
}
}
5.启动server-provider和server-consumer服务
启动完成后就会在dubbo的页面看到服务的提供者和消费者,到此就搭建完成了
四、总结
出现一个很小的问题,但是耗费了好长时间才解决,在server-consumer中使用过的@reference不是dubbo中的,导致注册失败!