下载ZooKeeper地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
建议下载zookeeper3.4版本,3.5版本还不稳定。
修改conf目录下zoo_sample.cfg文件名为zoo.cfg
添加如下配置
tickTime=2000
dataDir=/zookeeper/dataDir
dataLogDir=/zookeeper/logs
clientPort=2181
在windows上启动直接进入bin目录中执行./zkServer.sh start启动
linux下安装zookeeper参考:https://www.cnblogs.com/gulang-jx/p/7423564.html
创建项目 dubbo-server
pom文件 (生产者及消费者引入相同)
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
org.apache.zookeeper
zookeeper
3.4.6
org.slf4j
slf4j-log4j12
application.properties
server.port=8081
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.example.dubbo.service
DubboService
package com.example.dubbo.service;
public interface DubboService {
String hello(String name);
}
DubboServiceImpl (注意此处@Service 注解标识为 Dubbo 服务)
package com.example.dubbo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.example.dubbo.service.DubboService;
// 注册为 Dubbo 服务
@Service
public class DubboServiceImpl implements DubboService {
@Override
public String hello(String name) {
String hi = name + ",你好!!!";
System.out.println("调用服务:" + hi);
return hi;
}
}
运行 DemoWebApplication 启动类的 main 方法,查看控制台打印日志可以得到如下结果:
pom文件中和上面引入的一样。
application.properties
server.port=8082
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.example.dubbo.service
DubboService 跟上面生产者文件一样,建议实际开发将接口单独作为一个项目避免重复代码
UserDubboConsumerService
package com.example.dubbo.service;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
@Component
public class UserDubboConsumerService {
@Reference
DubboService service;
public String hello(String name) {
String hi = service.hello(name);
System.out.println(hi);
return hi;
}
}
UserController
package com.example.dubbo.controller;
import com.example.dubbo.service.UserDubboConsumerService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author: wd
* @Description: TODO
* @date 2019/7/2 13:53
*/
@RestController
public class UserController {
@Resource
private UserDubboConsumerService service;
@RequestMapping(value = "hello/{name}",method = RequestMethod.GET)
public String Hello(@PathVariable String name){
return service.hello(name);
}
}
当项目其中的时候,会想zookeeper中查询服务生产者地址,然后直接,调用生产者服务中的服务。zookeeper是提供软负载均衡。比nginx中需要手动配置服务地址,来看,好多了
上面服务生产和消费都创建成功了,那么我们启动测试一下
启动成功!
打开浏览器 输入http://localhost:8082/hello/wudi
此时一个分布式RPC服务框架就测试成功了
踩坑经历:在搭建过程中也碰到诸如@Reference 注解为null的异常等,google了一下结果答案全是雷同,比如什么服务没注册进去、使用容器不同、MVC的注解跟dubbo的注解冲突
于是我下载了dubbo-admin
前往github上下载dubbo-admin:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0
新版本中apache-dubbo-2.7.0已经没有dubbo-admin
进入dubbo-admin文件夹,输入cmd,打开dos窗口,输入以下命令:
mvn clean package
在target文件夹下生成 dubbo-admin-0.0.1-SNAPSHOT.jar,进入target执行命令
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
启动成功后,进入http://localhost:7001/ ,输入账号密码 root,root
,最后还是测试得出生产者的接口路径必须要和消费者的接口路径一模一样否则就会空指针。
文章原文:https://blog.csdn.net/qq_34719291/article/details/94550355
没啥时间排版,将就看吧,原创不易,请多包涵。