java服务1

来源:互联网 发布:淘宝网显示不正常 编辑:程序博客网 时间:2024/06/07 01:37

1.    工作心得与经验分享

2.    Java入门与架构演变:

Ÿ   单一应用架构:Java app

一个应用,将所有功能都部署在一起,以减少部署节点和成本

Ÿ   简单MVC模式:jsp+servlet+javabean

在多线程情况下,会创建大量的实例对象,大量占用java内存,线程间的通讯阻塞的,在高并发情况下容易导致访问速度慢

Ÿ   SSH

Spring中的类对象基本都声明为单例模式,缓解jvm内存瓶颈

统一、安全管理bean对象

线程安全类不成熟,编程复杂

没有负载均衡措施

Ÿ   分布式服务架构SOA:dubbo

透明化的远程方法调用

软负载均衡及容错机制

服务的订阅与发布

3.    Dubbo原理介绍

Dubbo是一个分布式服务框架,以及提供SOA治理方案。

 

ServiceProvider:暴露服务方(服务提供者)

ServiceConsumer:调用远程服务方(服务消费者)

Registry:服务注册中心eg. zookeeper

Monitor:统计服务的调用次调和调用时间的日志服务(服务监控中心)

Exporter(Container): 服务运行容器

 

Dubbo主要通过服务提供者和消费者的方式进行服务调用。调用过程:

ž  服务容器负责启动,加载,运行服务提供者

ž  服务提供者在启动时,向注册中心注册自己提供的服务

ž  服务消费者在启动时,向注册中心订阅自己所需的服务

ž  注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

ž  服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用

ž   服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

 

Dubbo配置

Dubbo基于Spring的Schema扩展进行加载

服务提供方:

  <!-- 和本地服务一样实现远程服务 -->

   <bean id=“xxxService”class=“com.xxx.XxxServiceImpl” />  

   <!-- 增加暴露远程服务配置 -->

   <dubbo:service  interface=“com.xxx.XxxService”ref=“xxxService” />

 

服务消费方:
    <!-- 增加引用远程服务配置 --> 

    <dubbo:reference id=“xxxService”interface=“com.xxx.XxxService” />

    <!-- 和本地服务一样使用远程服务 -->

    <bean id=“xxxAction”class=“com.xxx.XxxAction”>

        <property name=“xxxService”ref=“xxxService” />

    </bean>

 

优势

ž   通过注册中心注册,消费者无需知道提供方的地址,可以通过注册中心读取

ž   注册中心作为中间层,在中间层又可以实现负载均衡

ž   不需要负载均衡硬件,真正的实现大规模分布式系统的远程服务调用

ž   同时在注册中心宕机的情况下,支持服务提供者和消费者直接通过地址调用,在容错上表现较好

ž   改变服务提供者不需要通知服务消费者,实现了平滑删除和添加

 

4.    其他扩展知识

Ÿ   多线程介绍

线程安全:sychronized,concurrentHash等

多线程调度:线程池,fork.Join等

Ÿ   JVM内存模型

全局变量:存放在静态区, 程序结束后由系统释放。线程之间共享。 

局部变量:存放在虚拟机栈区,由编译器自动分配释放。线程之间不共享,

方法:存放在本地方法栈,存放该本地方法的局部变量表、操作数栈、动态链接、出口信息。方法执行完毕后释放内存空间。线程之间不共享。

5.    服务集成,测试以及打包

Dubbo之前的服务框架并没有做服务启动相关工作,系统需要强依赖容器,dubbo内实现启动spring容器,将系统全部通过spring启动处理,将服务和容器解耦。

引入集成框架pom.xml文件配置

 <dependency>

     <groupId>com.alibaba</groupId>

     <artifactId>dubbo-pinganfu</artifactId>

     <version>2.5.3.pinganfu</version>

     <exclusions>

<exclusion>

<groupId>com.alibaba</groupId>

<artifactId>dubbo-config-api</artifactId>

</exclusion>

<exclusion>

<groupId>com.alibaba</groupId>

<artifactId>dubbo-container-spring</artifactId>

</exclusion>

</exclusions>

 </dependency>

 

配置文件特殊处理

ž   如项目中所有的配置文件都是在META-INF目录下,不做处理

ž   如不是这需要在dubbo.properties文件中增加对配置文件相对路径的指定:

dubbo.spring.config=classpath*:/spring/applicationContext*.xml

 

具体调用服务方式:

 

打包:

以mkt项目为例,新增mkt-assmbly模块,顾名思义打包集合,详细如下:

ž   assembly有jar包和war的区分

ž   Bin项目war包的启动入口

ž   Config配置文件统一管理

ž   Webapp为war和容器结合

打包结果如下,比对之前的打包结果,具有如下优点:

ž   配置文件统一管理

ž   服务本地启动,也可以兼容容器

ž   将打包服务和业务逻辑分离,让打包更加纯粹,解耦合

 

测试:

以stg5环境为例,选中测试接口,填写测试参数,点击提交

从Dubbo测试平台添加dubbo接口

从maven私服上下载façade接口,点击+号,导入成功刷新页面.