第一次使用dubbo,现将问题记录一下
1. 各软件版本
zookeeper 3.5.2-alpha
dubbo 2.6.1
curator-recipes 4.0.0
curator-framework 4.0.0
这是pom文件中添加的各个依赖版本。
注意curator-recipes及curator-framework必须,这是dubbo新版本所依赖的。
且zookeeper与curator之间有一个版本适配问题,参看连接 http://curator.apache.org/zk-compatibility.html。
dubbo需要log4j日志,暂时未添加log4j。
2. 安装zookeeper
下载zookeeper安装包,我的是windows环境,版本为3.5.2-alpha。
特别注意安装的zookeeper必须与pom文件中的依赖版本一致,不然报错。
解压zookeeper安装包,修改 /conf/zoo_samp.conf文件名为zoo.cfg.
打开zoo.cfg文件可以看到clientPort=2181 等配置,可自行修改,我没有修改该端口。
需要修改dataDir配置,在此,我又添加了dataLogDir配置:
dataDir=D:\solrCloud\20180831zookeeper\datafile\data
dataLogDir=D:\solrCloud\20180831zookeeper\datafile\log
3. 启动zookeeper
(1)打开cmd,进入zookeeper安装目录下面的bin目录,输入zkServer.cmd(windows环境)即可启动zookeeper服务端
(2)打开cmd,进入zookeeper安装目录下面的bin目录,输入zkCli.cmd(windows环境)即可启动zookeeper客户端,
可以看到连接到zookeeper了,输入help即可查看能够使用的命令。
4. 编写测试代码
使用的是idea这个IDE,springboot2.0。
新建一个工程,在工程下面新建两个module,一个为provider(服务提供者),这个项目名为spring-dubbo;一个为consumer(服务消费者),这个项目名为spring-consumer。
pom.xml参考上面介绍,在此不赘述。
贴一下pom.xml文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--添加zookeeper依赖-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.2-alpha</version>
<type>pom</type>
</dependency>
<!--添加dubbo依赖-->
<!-- https://mvnrepository.com/artifact -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.1</version>
</dependency>
<!--curator同zookeeper版本有一个适配问题,参考http://curator.apache.org/zk-compatibility.html-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork><!-- fork:如果没有该配置,这个devtools不会起作用,即应用不会restart -->
</configuration>
</plugin>
</plugins>
</build>
(1)provider的application.yml文件内容如下:
server:
servlet:
context-path: /dubbo
port: 8085
dubbo:
application:
name: provider
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20880
scan: cn.lhkj.springdubbo.project.home.service
provider在cn.lhkj.springdubbo.project.home.service包下面提供了一个服务。
(2)consumer的application.yml文件内容如下:
server:
servlet:
context-path: /consumer
port: 8086
dubbo:
application:
name: consumer
registry:
address: zookeeper://127.0.0.1:2181
protocol:
name: dubbo
port: 20880
scan: cn.lhkj.springdubbo.project.home.service
注意:这里配置的scan的值必须和provider中配置的scan的值一样。
(3)特别注意
我在provider中提供一个接口服务,这个接口名为HomeService,所在的包为:
cn.lhkj.springdubbo.project.home.service。
consumer中如果要使用这个接口服务,或者(1)将provider中的这个接口提取出来为一个公共服务,到实际生产时候可以生成jar包,然后在consumer引入使用。
或者(2)在consumer中,编写一个接口,接口名为HomeService,接口所在的包为:cn.lhkj.springdubbo.project.home.service。
(4)在provider和consumer工程主函数添加@EnableDubbo注解
(5)provider工程中服务接口代码如下:
package cn.lhkj.springdubbo.project.home.service;
public interface HomeService {
String sayHello();
}
package cn.lhkj.springdubbo.project.home.service;
import com.alibaba.dubbo.config.annotation.Service;
@Service
public class HomeServiceImpl implements HomeService {
@Override
public String sayHello() {
return "hello world";
}
}
注:@Service注解为dubbo注解,提供了一个接口服务
(6)consumer工程中使用接口服务代码:
package cn.lhkj.project.consumer.service;
import cn.lhkj.springdubbo.project.home.service.HomeService;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
@Component
public class ConsumerService {
@Reference
HomeService homeService;
public String getInfo(){
return homeService.sayHello();
}
}
注:如果没有使用jar包,在consumer工程中必须有HomeService接口代码:
package cn.lhkj.springdubbo.project.home.service;
public interface HomeService {
String sayHello();
}
–end
–add:
感觉没有spring-cloud使用起来方便、简洁