一、zookeeper
1.Zookeeper介绍
https://blog.csdn.net/Z_Vivian/article/details/102562919
2.Zookeeper服务端集群搭建
https://blog.csdn.net/Z_Vivian/article/details/101291716
二、Dubbo
1.Dubbo介绍
Dubbo是一个远程服务调用的分布式框架,力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
1.远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2.集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3.自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
2.Dubbo配置及使用
Dubbo管理台
Dubbo管理台看自己是否需要可视化管理(可有可无)
dubbo 2.5.6 源码地址:
https://codeload.github.com/apache/dubbo/zip/dubbo-2.5.6
将dubbo-admin用idea打开
将WEB-INF/dubbo.properties的zookeeper地址改成自己的。然后配置tomcat将项目跑起来
在浏览器访问:http://localhost:8080/governance/services出现登录界(部署在服务器访问http://ip:8080/dubbo-admin-2.5.6/governance/applications)
面输入用户名:guest 密码:guest 如下登录成功
提供者:
项目结构图如下:
①配置pom.xml文件,添加dubbo依赖。
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
②配置application.properties文件
server.port=8081
#配置dubbo的id和name 这个是为了在monitor里面区分不同应用的
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.id=dubbo-provider
spring.dubbo.registry.address=zookeeper://123.207.231.159:2181
spring.dubbo.provider.timeout=20000
③启动类:DoubleProviderApplication添加@EnableDubboConfiguration注解。
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
④接口类:UserServer.java(与消费者接口路径必须保持一致)
public interface UserServer {
String login(String username,String password);
}
⑤实现类:IUserServer.java实现UserServer 接口模拟登陆。
import com.alibaba.dubbo.config.annotation.Service;
import com.zzx.server.UserServer;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@Component
@Service(interfaceClass = UserServer.class)
public class IUserServer implements UserServer {
@Override
public String login(String username, String password) {
if(StringUtils.isEmpty(username)&&StringUtils.isEmpty(password)){
return "账号或密码不能为空!";
}
if(username.equals("admin")&&password.equals("admin")){
return "登录成功";
}
return "登录失败";
}
}
消费者:
项目结构图如下:
①配置pom.xml文件,添加dubbo依赖。
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.11</version>
</dependency>
②配置application.properties文件
server.port=8082
spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.id=dubbo-consumer
spring.dubbo.registry.address=zookeeper://123.207.231.159:2181
#远程服务调用超时
spring.dubbo.consumer.timeout=10000
#启动时检查提供者是否存在,true报错,false忽略
spring.dubbo.consumer.check=false
③启动类:DubboConsumerApplication添加@EnableDubboConfiguration注解
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
④接口类:UserServer.java(与提供者接口路径必须相同)
public interface UserServer {
String login(String username,String password);
}
⑤服务层:IUserServer.java
import com.alibaba.dubbo.config.annotation.Reference;
import com.zzx.server.UserServer;
import org.springframework.stereotype.Component;
@Component
public class IUserServer {
@Reference
UserServer userServer;
public String login(String username,String password){
return userServer.login(username, password);
}
}
⑤控制器:UserConsumer
import com.zzx.server.imp.IUserServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserConsumer {
@Autowired
IUserServer userServer;
@PostMapping("/login")
public String login(String username,String password){
return userServer.login(username, password);
}
}
三、测试
浏览器继续访问:http://localhost:8080/governance/services 如下已经可以看到服务了。
在postman输入地址:localhost:8082,设置Post请求,设置请求参数,如下图。返发送请求测试成功!