项目做大了,开始使用分布式部署,学习了下dubbo的使用,dubbo版本使用的2.8.4, zookeeper版本是3.4.6
下载zookeeper : http://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/
在/usr目录下创建zookeeper文件夹, 解压zookeeper并移动到/usr/zookeeper/目录下
tar -zxvf ./zookeeper-3.4.6.tar.gz
mv ./zookeeper-3.4.6 /usr/zookeeper/zookeeper-3.4.6/
设置环境变量
export PATH=/usr/zookeeper/zookeeper-3.4.6/bin:$PATH
zookeeper的配置文件是zoo.cfg, 所以进入conf目录下, 复制zoo_sample.cfg 改名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
到这里就配置完成了, 很简单吧
启动zookeeper
/usr/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start
下载地址:https://github.com/dangdangdotcom/dubbox
需要自己使用maven打包,
我这里有打包好的war,下载直接使用
修改下WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181
把war包放在tomcat/webapps中,启动tomcat,
浏览器访问地址: http://192.168.106.19:8080/dubbo-admin
默认账号: root
默认密码: root
下载地址:https://github.com/dangdangdotcom/dubbox
需要自己使用maven打包,
我这里有改良后打包好的war,下载直接使用
修改下 application.properties
dubbo.application.name=dubbo-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=7070
放在tomcat中启动tomcat
浏览器访问: http://192.168.106.19:8080/dubbo-monitor/
默认账号: admin
默认密码: admin
配置完成.
下面是代码部分
代码使用springboot 无xml配置方式.
代码目录结构
maven分模块这里就不细说了, 如果不会可以先去学习下.
maven依赖
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
com.alibaba
dubbo
2.8.4
log4j
log4j
org.apache.zookeeper
zookeeper
3.4.6
com.bwton
dubbo-interface
0.0.1-SNAPSHOT
application.yml 配置
server:
port: 8081
## Dubbo 配置
spring:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
name: dubbo-provider
monitor: # 添加monitor监控
protocol: registry
registry: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://192.168.106.19:2181
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
name: dubbo
port: 20880
scan: com.bwton.dubbo.provider.service.impl #服务暴露与发现消费所在的package
service实现类
package com.bwton.dubbo.provider.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.bwton.dubbo.pojo.Do.UserDO;
import com.bwton.dubbo.pojo.vo.UserVO;
import com.bwton.dubbo.service.TestService;
import org.springframework.beans.BeanUtils;
/**
* @author XueXianlei
* @Description:
* @date 2018/10/8 14:51
*/
@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
@Override
public UserVO getUser(String userName) {
if (null == userName) {
return null;
}
UserDO userDO = new UserDO();
userDO.setId(1);
userDO.setUserName(userName);
UserVO userVO = new UserVO();
BeanUtils.copyProperties(userDO, userVO);
return userVO;
}
}
maven依赖和提供者一样
application.yml配置
server:
port: 8082
spring:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
name: dubbo-consumer
monitor: # 添加monitor监控
protocol: registry
registry: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://192.168.106.19:2181
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
name: dubbo
port: 20880
scan: com.bwton.dubbo.consumer.controller #服务暴露与发现消费所在的package
consumer:
check: false
代码实现
package com.bwton.dubbo.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.bwton.dubbo.pojo.vo.UserVO;
import com.bwton.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author XueXianlei
* @Description:
* @date 2018/10/8 15:06
*/
@RestController
@RequestMapping("/test")
public class TestController {
@Reference(version = "1.0.0")
private TestService testService;
@RequestMapping("/getUser")
public UserVO getUser(String userName) {
UserVO user = testService.getUser(userName);
return user;
}
}
启动服务提供者, 再启动服务消费者, 就可以调用了
下面说下集群搭建
这里使用的伪集群, 即在一个服务器中(服务器有限)
复制zookeeper-3.4.6 3分, 分别为
zookeeper-3.4.6-server1
zookeeper-3.4.6-server2
zookeeper-3.4.6-server3
拿zookeeper-3.4.6-server1距离
进入目录, 创建data和logs两个文件夹
cd zookeeper-3.4.6-server1
mkdir data
mkdir logs
修改zoo.cfg文件
zookeeper-3.4.6-server1
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server1/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server1/logs
clientPort=2181
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zookeeper-3.4.6-server2
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server2/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server2/logs
clientPort=2182
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
zookeeper-3.4.6-server3
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/zookeeper-3.4.6-server3/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6-server3/logs
clientPort=2183
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889
参数描述
initLimit: zookeeper集群中的包含多台server, 其中一台为leader, 集群中其余的server为follower. initLimit参数配置初始化连接时, follower和leader之间的最长心跳时间. 此时该参数设置为5, 说明时间限制为5倍tickTime, 即5*2000=10000ms=10s.
syncLimit: 该参数配置leader和follower之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为2, 说明时间限制为2倍tickTime, 即4000ms.
server.X=A:B:C 其中X是一个数字, 表示这是第几号server. A是该server所在的IP地址. B配置该server和集群中的leader交换消息所使用的端口. C配置选举leader时所使用的端口. 由于配置的是伪集群模式, 所以各个server的B, C参数必须不同.
创建ServerID标识
除了修改zoo.cfg配置文件,集群模式下还要配置一个文件myid,这个文件在dataDir目录下,这个文件里面就有一个数据就是A的值,在上面配置文件中zoo.cfg中配置的dataDir路径中创建myid文件
echo "1" > /usr/zookeeper/zookeeper-3.4.6-server1/data/myid
echo "2" > /usr/zookeeper/zookeeper-3.4.6-server2/data/myid
echo "3" > /usr/zookeeper/zookeeper-3.4.6-server3/data/myid
启动zookeeper
/usr/zookeeper/zookeeper-3.4.6-server1/bin/zkServer.sh start
/usr/zookeeper/zookeeper-3.4.6-server2/bin/zkServer.sh start
/usr/zookeeper/zookeeper-3.4.6-server3/bin/zkServer.sh start
dubbo-admin 修改 dubbo.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181|zookeeper://127.0.0.1:2182|zookeeper://127.0.0.1:2183
dubbo-monitor 修改 application.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181|zookeeper://127.0.0.1:2182|zookeeper://127.0.0.1:218
重启tomcat
代码注册中心地址修改, 改为zookeeper集群配置, 提供者和消费者都要改
server:
port: 8082
spring:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
name: dubbo-consumer
registries[0]: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://192.168.106.19:2181
registries[1]:
address: zookeeper://192.168.106.19:2182
registries[2]:
address: zookeeper://192.168.106.19:2183
monitor: # 添加monitor监控
protocol: registry
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
name: dubbo
port: 20880
scan: com.bwton.dubbo.consumer.controller #服务暴露与发现消费所在的package
consumer:
check: false
集群搭建也完成了.