链接:https://pan.baidu.com/s/1IllSy9dOQDsswu38XNyA1w
提取码:8zrz
1.1、下载zookeeper
网址 https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/
解压运行zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件
将conf下的zoo_sample.cfg复制一份改名为zoo.cfg即可。
注意几个重要位置:
dataDir=./ 临时数据存储的目录(可写相对路径)
clientPort=2181 zookeeper的端口号
修改完成后再次启动zookeeper
ls /:列出zookeeper根下保存的所有节点
create –e /sxt 123:创建一个sxt节点,值为123
get /sxt:获取/sxt节点的值
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
网盘下载
链接:https://pan.baidu.com/s/1IllSy9dOQDsswu38XNyA1w
提取码:8zrz
修改 src\main\resources\application.properties 指定zookeeper地址
rces\application.properties 指定zookeeper地址
mvn clean package -Dmaven.test.skip=true
mvn installl
或者
mvn package
/target下面
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
注意:【有可能控制台看着启动了,但是网页打不开,需要在控制台按下ctrl+c即可】
http://127.0.0.1:7001/
默认使用root/root 登陆
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
mkdir /root/software #在root下面创建software目录
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /root/software #解压到指定目录
打开控制台,运行$ sudo vi /etc/profile,在最后插入下面要配置的内容 ,按Esc键 ,输入( :wq 保存并退出)
JAVA_HOME=/root/software/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
source /etc/profile
验证
java -version
可以从 (百度网盘)
https://apache.org/dist/zookeeper/stable
http://mirror.bit.edu.cn/apache/zookeeper/stable/
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz 来下载
建议使用镜像
推荐下载好了再使用xftp传到linux如果使用wget会丢失jar包[亲测过]
#解压到/usr/local下面
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local
#进入目录
cd /usr/local/
#修改名字
mv zookeeper-3.4.14/ zookeeper
1
#打开zk的配置文件目录
cd /usr/local/zookeeper/conf
#修改zoo_sample.cfg 为zoo.cfg [一定要改]
mv zoo_sample.cfg zoo.cfg
#编辑zoo.cfg
vi zoo.cfg
1
#!/bin/bash
#chkconfig:2345 20 90
#description:zookeeper
#processname:zookeeper
ZK_PATH=/usr/local/zookeeper
export JAVA_HOME=/root/software/jdk1.8.0_181
case $1 in
start) sh $ZK_PATH/bin/zkServer.sh start;;
stop) sh $ZK_PATH/bin/zkServer.sh stop;;
status) sh $ZK_PATH/bin/zkServer.sh status;;
restart) sh $ZK_PATH/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
打开/etc/init.d/
把脚本注册为Service
增加权限
如果出现连接不上在问题修改etc/hosts
删除第一行里面的127.0.0.1
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以你不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
https://github.com/apache/dubbo-admin/tree/master
配置参考文档
http://dubbo.apache.org/zh-cn/docs/admin/introduction.html
在window系统打爆成jar
dubbo-admin 管理项目
dubbo-monitor-simple监控统计项目
dubbo-registry-simple 简单的注册中心,开发中一般使用zk
配置密码和注册中心,在启动之前一定要启动注册中心,要不然无法访问哦
使用mvn install 打包(或者 mvn package)
把包好的jar包放到linux上去使用java -jar 运行
在Winows里面使用http://xxx.xxx.xxx:7001/去访问
用户名:root
密码:root
docker pull zookeeper:3.4.14#拉取镜像
docker run --name zookeeper -p 2182:2181 -v /root/zookeeper/data:/data -d zookeeper:3.4.14#启动容器
https://hub.docker.com/r/chenchuxin/dubbo-admin
docker pull webuilder/dubboadmin
docker run -itd -p 8080:8080 -e ZOOKEEPER_SERVER=your_zookeeper_ip:2181 dubboadmin --name=dubbo-name
or
docker run -itd -p 8080:8080 --add-host zookeeper-server:your_zookeeper_ip dubboadmin --name=dubbo-name
ZOOKEEPER_SERVER (必选) Zookeeper's IP and PORT, sparated by a colon. Default is 'zookeeper-server:2181'
ROOT_PASSWORD (可选) Dubbo Admin's root user's password, default is 'root'
GUEST_PASSWORD (可选) Dubbo Admin's guest user's password, default is 'root'
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;
订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。
根据 dubbo《服务化最佳实践》
2.1,分包
建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。
如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方,只需在 spring 加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。
2.2,粒度
服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。
服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。
不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。
作用:定义公共接口,也可以导入公共依赖
①Bean模型
@Data
@AllArgsConstructor//生成全参数构造函数
@NoArgsConstructor // 生成无参构造函数
public class UserAddress implements Serializable{
private Integer id;
private String userAddress;
private String userId;
}
②Service接口UserService
public List<UserAddress> getUserAddressList(String userId)
③Service接口OrderService
public interface OrderService {
/**
* 初始化订单
* @param userId
*/
public List<UserAddress> initOrder(String userId);
}
1、pom.xml
<dependencies>
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2、Service
public class UserServiceImpl implements UserService{
public static List<UserAddress> address=new ArrayList<>();
static {
address.add(new UserAddress(1, "湖北省武汉市东湖高新区金融港B22栋11楼", "whsxt"));
address.add(new UserAddress(2, "北京市海淀区西三旗街道建材城西路中腾建华商务大厦东侧二层尚学堂", "bjsxt"));
}
@Override
public List<UserAddress> getUserAddressList(String userId) {
//讲道理要是去数据库里面去查询的
return address;
}
}
1、pom.xml
<dependencies>
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2、测试
<dependencies>
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
现在这样是无法进行调用的。我们ego-order-web引入了ego-interface,但是interface的实现是ego-user,我们并没有引入,而且实际他可能还在别的服务器中
1、引入dubbo和其它的修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sxt</groupId>
<artifactId>ego-user-service-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sxt</groupId>
<artifactId>ego-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.7</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
<!-- curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
</dependencies>
</project>
由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
dubbo 2.6以前的版本引入zkclient操作zookeeper
dubbo 2.6及以后的版本引入curator操作zookeeper
下面两个zk客户端根据dubbo版本2选1即可