RPC_rmi与Zookeeper

RPC

mvc是一种设计模式

rpc是上层协议,应用层协议。底层可以基于TCP协议

dns服务器可以是单映射也可以是多映射,一个域名只可以对应一个ip,一个ip可以对应多个域名。

单体架构的优点:部署简单,维护方便,成本低。

​ 缺点:访问瓶颈,甚至出现宕机等情况。

分布式架构

优点: 增大了系统可用性,减少单点故障。

​ 增加了重用性,因为模块化,所以重用性更高,高内聚,低耦合
​ 增加了可扩展性;
​ 增加每个模块的负载能力。

缺点:成本更高;架构更加复杂;整体响应时间变长;吞吐量变大。(吞吐量=请求书/秒)

存在的问题在于分布式架构中各个模块之间如何通信?所以使用RPC协议进行通信。

适用于大型互联网项目,客户多,数据多,访问并发高,压力大,吞吐量大。

Jackson对java对象和json字符串的转化处理

转换前需要创建jackson 的转化器ObjectMapper,对象转换json用writeValueAsString;json转换对象用readValue(值,泛型)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public static void main(String[] args) throws Exception{
//创建集合
List list= new ArrayList();
//创建第一个对象保存到集合中
User user = new User();
user.setUsername("admin");
user.setPassword("123");
list.add(user);
//创建第二个对象
user = new User();
user.setUsername("guest");
user.setPassword("abc");
list.add(user);
//创建jackson中的转换器
ObjectMapper objectMapper = new ObjectMapper();
//java对象——>json
String strObject = objectMapper.writeValueAsString(user);
System.out.println("java对象——>json 【"+strObject+"】");
//java集合——>json
String listObject = objectMapper.writeValueAsString(list);
System.out.println("java集合——>json 【"+listObject+"】");
//json字符串——>java对象
User uObj = objectMapper.readValue(strObject,User.class);
System.out.println("java对象【username = "+uObj.getUsername()+";password ="+uObj.getPassword()+"】");
//json字符串——>map集合 jackson中可以把任意对象描述的json字符串转换为map集合对象
Map mapObj = objectMapper.readValue(strObject, HashMap.class);
System.out.println("mapObj的类型是:"+mapObj.getClass().getName());
System.out.println("mapObj的内容是:"+mapObj);
//json字符串——>list集合
//创建一个jackson中用于描述集合和集合泛型的类型
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class,User.class);
List<User> list1 = objectMapper.readValue(listObject,javaType);
System.out.println("集合长度为:"+list1.size()+"。 ------");
for (User u :list1){
System.out.println("java对象【username = "+u.getUsername()+";password ="+u.getPassword()+"】");
}
System.out.println("-------------------");
}

HttpClient中在控制器controller中加入@CrossOrigin注解。代表当前方法可以被AJAX跨域访问。会在响应头中增加参数 access-control-allow-origin

RMI(远程方法调用)

RMI是从jdk1.2推出的功能,可以实现在java应用中像调用本地方法一样调用另一个服务器中java应用(jvm)中的内容;RMI是java语言的远程调用,无法实现跨语言。

Remote

java.rmi.Remote 定义了此接口为远程调用接口。如果接口被外部调用,需要继承此接口。

RemoteException

java.rmi.RemoteException

继承了Remote接口的接口中,如果方法是允许被远程调用的,需要抛出此异常。

UnicastRemoteObject

java.rmi.server.UnicastRemoteObject

此类实现了Remote接口和Serializable接口。

自定义接口实现类除了实现自定义接口还需要继承此类。

LocateRegistry

java.rmi.registry.LocateRegistry

可以通过LocateRegistry在本机上创建Registry,通过特定的端口就可以访问这个Registry。

Naming

java.rmi.Naming

Naming定义了发布内容可访问RMI名称。也是通过Naming获取到指定的远程方法。

Zookeeper

zk客户端常用命令:
zkCli.sh 默认链接的是 localhost:2181 zookeeper主机

zkCli.sh -server ip:port 指定连接到ip:port zookeeper主机

  • quit 退出命令zk客户端控制台

  • ls ls [-s] [-R] /path

    -s 详细信息,替代老版的ls2

    -R 当前目录和子目录中内容都罗列出来

    例如:ls -R / 显示根目录下所有内容

  • create

    create /path [data]

    [data] 包含内容

    创建指定路径信息

    例如:create /demo 创建/demo

  • get

    get [-s] /path

    [-s] 详细信息

    查看指定路径下内容。

    例如: get -s /demo

    img

    null:存放的数据

    cZxid:创建时zxid(znode每次改变时递增的事务id)

    ctime:创建时间戳

    mZxid:最近一次更近的zxid

    mtime:最近一次更新的时间戳

    pZxid:子节点的zxid

    cversion:子节点更新次数

    dataversion:节点数据更新次数

    aclVersion:节点ACL(授权信息)的更新次数

    ephemeralOwner:如果该节点为ephemeral节点(临时,生命周期与session一样), ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0.

    dataLength:节点数据字节数

    numChildren:子节点数量

  • set

    set/path data

    设置节点内容

  • delete

    delete/path

    删除节点,不能删除有子节点的节点

    deleteall/path

    删除节点,可以删除有字节点的节点

# 推荐文章
  1.vpy加密视频破解转mp4-JAVA代码实现
  2.x715quan逆向协议分析
  3.20200516 每日记录
  4.AutoGeneratorCode
  5.C语言知识小计

评论


:D 一言句子获取中...

加载中,最新评论有1分钟延迟...