发表于: 2017-12-02 20:48:15
2 729
一;再总结一下任务中的概念
1; rmi与spring rmi的关系…………..
Rmi
Spring rmi
2; SCA是什么…………..
先说SCA的目的;是使用户在构建企业应用时有一个不再直接面对具体的技术细节的层次,而是通过服务组件的方式来构建应用。这种方式也使得客户的企业应用具有良好的分层架构,能够很好的分离应用的业务
再说概念; 面向服务的组件模型(Service Oritented Architecture, SCA)
主要是理解组件是什么; 服务组件是SCA中的基本组成元素和基本构建单位,也是我们具体实现业务逻辑的地方。我们可以把它看成是构建我们应用的积木。把传统的POJO,无状态会话BEAN包装成SCA中的服务组件。SCA服务组件的主要接口规范是基于WSDL的,另外为了给Java编程人员提供一个比较直接的接口,SCA的部分服务组件也提供了Java接口。因此,使用服务组件的客户端可以选择使用WSDL接口或Java接口。
服务组件提供给别的服务调用的入口叫Interface(接口)。而服务组件本身可能也需要调用别的服务,这个调用出口叫Reference(引用)。无论是接口还是引用,其调用规范都是WSDL或Java接口。
3; 为什么要用分布式………..
a. 最主要的是服务器性能;单台服务器的性能有限,但是分开来综合利用多个节点的处理能力,在分散压力的同时,也提高代码的整服务能力
b. 分布式模块可以采用不同的解决方案,满足对应的交互协议,模块之间可以根据各自的业务特点,选择不同的处理方式,很灵活
c. 模块的内聚性更高,更多的关注自身业务。
4; RmiServiceExporter……………发布为服务……
RmiServiceExporter把任何Spring管理的Bean输出成一个RMI服务。通过把Bean包装在一个适配器类中工作。适配器类被绑定到RMI注册表中,并且将请求代理给服务类。
5; RmiProxyFactoryBean…………注册为服务…….
客户端的核心是RmiProxyFactoryBean,包含serviceURL属性和serviceInterface属性通过JRMP访问服务。JRMP:java remote method protocol,Java特有的,基于流的协议。
6;什么是UID………………
一个类要实现序列化和反序列化,不声明serialVersionUID是可行的,serialVersionUID主要是辅助序列化和反序列化,序列化和反序列化的时候,serialVersionUID必须一致,反序列化才会成功。具体的序列化过程是这样的:序列化操作的时候系统会把当前类的serialVersionUID写入到序列化文件中,当反序列化时系统会去检测文件中的serialVersionUID,判断它是否与当前类的serialVersionUID一致,如果一致就说明序列化类的版本与当前类版本是一样的,可以反序列化成功,否则失败。
如果不手动指定给SerialVersionUID的值,系统会计算当前类的hash值并赋予给serialVersionUID,
假如序列化处或者反序列化处的user类被修改了,系统生成的两个serialVersionUID就会不一致,导致反序列化失败。
7;集群与分布式的联系区别……
分布式:是不同的业务模块部署在不同的服务器上;或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
集群:是同一个业务部署在多台机器上,提高系统可用性
分布式将不同的业务分布在不同的地方;集群将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
8;异常与序列化, 也简单说一下;
抛异常:由于远程方法调用的本质依然是网络通信,只不过隐藏了底层实现,网络通信是经常会出现异常的,所以接口的所有方法都必须抛出RemoteException以说明该方法是有风险的;
为什么要序列化:
public class Student implements Serializable
由于方法参数与返回值最终都将在网络上传输,故必须是可序列化的;
private static final long serialVersionUID
而且最好加上上面提到的UID;以防出错…………..
二;最后是代码..
1;分离出service…..就是只保留数据库操作层……….服务端………
发布为服务…….加载…..
2;分离出web层…..实际上就是controller…….客户端……..
然后是远程调用…..
3;实现分离之后,部署两个service,供远程随机调用……….
发布两个服务效果一样,不多说了,随机调用我是封装到工具类了
然后controller随机调用….把返回结果直接拿来展示……..
4;实现随机service之后,通过try…catch…..实现一台挂掉,另一台顶上…..
5;是部署nginx,反向代理两个tomcat….随机访问服务器之后,随机访问service…..这个就不多说了……配置好nginx…..就可以了……
6;再简单说一个师兄的实现方法………
思路不一样……我是封装成工具类了,他是直接再controller,利用init初始化的方法完成…………先是注入一个全局对象,直接获取任意bean….获取到service的bean…..调用service的方法…….
明日计划的事情:
1;开始新任务….
2;学习java基础…..
遇到的问题及解决方法:
问题不大,几乎都是操作不详细造成…..记录一个吧…….
1;nginx的10060超时错误……..网上很多原因……
查看日志…….
实际上就是因为配置了负载均衡引起的……配置了tomcat没有启动,这样首页找不到,tomcat找不到…..就会超时………
收获:
1;基本实现完成理解了分布式,以及集群的概念
2;对于tomcat以及nginx运用的也很走心
3;了解一些上述概念
评论