BlazeDS详解

article/2025/9/13 13:00:27
一、Blazeds初步

客户端应用

Blazeds包括客户端和服务端应用。客户端应用是典型的Adobe flex或者AIR应用。Flex和AIR应用使用flex组件和blazeds服务通信,包括Remote Object、HTTPService、WebService、Produce和Consumer。其中的HTTPService、WebService、Produce和Consumer是Flex SDK中的。
虽然典型的应用是使用Flex或者AIR发展开发客户端应用,你也可以使用Flex结合HTML/JavaScript。或者你也可以使用HTML和JavaScript通过Ajax客户端库来和Blazeds通信.


Blazeds服务

Blazeds服务运行在一个J2EE的应用服务器中。让你的J2EE Web程序只是Blazeds需要通过一下配置:
1. 加入Blazeds和其他需要的jar包
2. 编辑WEB-INF/flex目录下的配置文件
3. 在web.xml文件中定义MessageBrokerServlet and a session listener。


Blazeds核心

Blazeds核心包括RPC Service和Messageing Service

RPC Service

远程程序调用(RPC)服务是应用程序访问外部数据的比较好的方法,通过调用、返回的形式。RPC允许客户应用程序异步请求远程程序,处理请求后直接返回给客户端。你可以通过HTTP GET or POST (HTTP services), SOAP (web services), 或者 Java objects (remoteobject services)等RPC组件直接访问数据。


如果你想通过使用RPC Services提供一些企业级功能,如不同域之间数据交换的代理功能、客户端认证、服务器端日志、本地化支持、RPC Services服务集中化管理等功能时,BlazeDS通过使用RemoteObject控件可以轻松实现,而不需要配置他们像SOAP-compliant网络服务。

当客户端RPC控件调用远程服务时。这个控件将返回的数据储存到一个ActionScript 对象,你可以轻易的获得这些数据。注意:HTTP services和web services可以直接使用,不包括Blazeds,但是RemoteObject不能脱离Blazeds或者ColdFusion.

Messageing Service

消息服务允许客户端应用异步的直接发送消息到服务器以及返回。消息定义的格式是:一个唯一的标识,Blazeds头,其他自定义头,一个消息体。
客户端发送消息就是消息生产者(producers)。在Flex应用中通过使用Producer控件来定义一个producer。客户端接收消息就是消息消费者(consumer),使用Consumers组件。Consumer控件负责订阅和接收服务器端某一个目的地的消息,Producer控件发送消息到这个目的地。

服务适配器

BlazeDS可以访问各种不同的数据持久化方案,比如数据库、JMS等其他持久化机制。

基于消息的框架

Blazeds使用基于消息的框架在客户端和服务端之间发送和返回数据。Blazeds在它们之间使用了两个交换模式。第一个模式是请求---响应模式,客户端发送请求给服务端处理。服务端返回处理结果给客户端。RPC Service就是使用这个模式。
第二个模式是发布—订阅模式,即服务端发布消息设置,客户端订阅了去接收它们。Messaging Service使用这个模式将数据推给“感兴趣“的客户端。Messaging Service同样使用求/响应模式来解决一些发布消息、数据交换等问题。

Channels and endpoints(通道和端点)

客户端使用通道发送消息给服务端。通道封装了消息的格式、网络格式、服务端解析方式、目的和应用代码。通道封装以及转换信息,并且传达他们到服务端的一个端点。
通道同样使得发送和返回的消息变得有序。有序对保证数据传送的一致性和可预见性起到重要的作用
在服务器端,通道是与基于Java的端点发生交换的,端点负责解析消息成特定的协议模式,然后把它传送给普通Java形式的“消息代理人”(Message Broker),最终由消息代理人决定该消息发往何处,路由给恰当的目的地





通道类型

Blazeds包括几个特殊的通道,包括标准的和加密的AMF通道。HTTP(AMFX)通道。AMF和HTTP通道都支持无轮询的请求/响应模式以及客户轮询模式来模拟实时通信,而AMF和HTTP流通道模式提供了真正的数据流实时模式。

二、Blazeds体系结构

Blazeds体系结构

一个Blazeds应用包含了一个运行在浏览器或者Adobe AIR的客户端应用并且和J2EE应用服务端通信。客户端可以是Flex也可以是结合Flex、HTML/JavaScript的应用程序。

整个体系主要包括通道、端点、消息、服务、目的地、适配器等,把这些搞懂也就差不多了。通道使得组件能够和Blazeds服务端的端点通信,将请求送到目的地端点和通道是相互映射的

1.Blazeds客户端体系结构

Blazeds使用一个基于消息的框架与服务端结合。这个框架使用通道封装了Flex程序和Blazeds服务端之间的连接。下面是Blazeds客户端的结构






以下Flex组件和Blazeds服务端结合:
. RemoteObject
• HTTPService
• WebService
• Producer
• Consumer
所有的这些组件都包含在Flex SDK和rpc.swc组件库中。

尽管RemoteObject、Producer、Consumer包含在Flex SDK中,他们仍然需要一个服务端来反编译出他们发送的消息。Blazeds和LiveCycle Data Services ES服务就是两个这样的服务端。当然Flex应用程序可以不使用Blazeds这种中间层而是直接使用HTTP Service或者Web Service来调用远程服务

2.0 通道和通道设置

Flex组件使用通道和Blazeds服务端交互。一条通道包含多条道路,他们的基础功能就是提供Flex客户端和Blazeds服务端的交流。通道中的道路都是按性能排序的。Flex组件会尝试连接第一条道路,不过这并不能保证一定能连接,有可能使用的还是道路中后面的那几条。它会搜寻通道中的道路知道连接上或者已经没有连接。


通道封装了Flex组件和Blazeds服务端之间的连接方式。概念上来说,通道是Flex组件下面的组件,他们处理组件和Blazeds服务端之间的交互。他们和Blazeds服务端上相应的端点通信。


Flex客户端使用不同的通道类型。例如AMFChannel和HTTPChannel。通道选择有很多的因素,包括你的程序构建的类型。如果你想要使用无二进制压缩的方式传输,可以使用HTTPChannel,它使用AMFX(AMF in XML),一种无二进制压缩的方式。

下面的例子在services-config.xml文件中创建了一个AMFChannel通道,与服务器上的AMFEndpoint通信:

<channels>

<channel-definition id="samples-amf" class="mx.messaging.channels.AMFChannel">

<endpoint url="http:// servername:8400/myapp/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>

</channel-definition>

</channels>

2.1为flex组件指定通道

如果你通过-services选项指定services-config.xml文件来编译MXML文件,那么组件(RemoteObject、HTTPService等等)会自动指定一个或者多个通道配置实例。

不过如果你没有加这个编译参数,或者想自己覆写编译项的行为,那么你可以在MXML或者AS文件中为组件指定通道。当你想要为你的组件使用动态目的地的时候,整个应用级别的默认通道非常重要。

通过加上-services编译参数,可以包含所有的客户端连接服务器需要的信息,但是一下情况你可能会选择手动设置通道:

1) 你不想硬编码端点路径在你编译的客户端swf文件。

2) 你想要动态的创建目的地(目的地不在services-config.xml文件内)。

3) 你想要在客户端代码控制组件使用通道的顺序。

下面的代码展示了如何在MXML文件中定义通道:

<RemoteObject id="ro" destination="Dest">

<mx:channelSet>

<mx:ChannelSet>

<mx:channels>

<mx:AMFChannel id="myAmf"

道MLcationonfig.xmluri="http://myserver:2000/myapp/messagebroker/amf"/>

</mx:channels>

</mx:ChannelSet>

</mx:channelSet>

</RemoteObject>

下面的代码则是AS文件:

private function run():void {

ro = new RemoteObject();

var cs:ChannelSet = new ChannelSet();

cs.addChannel(new AMFChannel("myAmf",

"http://servname:2000/eqa/messagebroker/amf"));

ro.destination = "Dest";

ro.channelSet = cs;

}

注意:当你在客户端代码创建通道时,还是必须在services-config.xml文件里配置一个指定端点的通道。否则,messagebroker就不能传递客户端请求到端点。

2.2 为目的地指定通道和端点

如果大多数的目的地使用使用相同的通道,你可以指定应用级别的默认通道,比如:

<services-config ...>

...

<default-channels>

<channel ref="my-http"/>

<channel ref="my-amf"/>s

</default-channels>

...

也可以单独指定通道,比如:

<destination id="sampleVerbose">

<channels>

<channel ref="my-secure-amf"/>

</channels>

...

</destination>

2.3 选择端点

可以参考文档或者看blazeds通道、端点配置

消息


Flex客户端组件和Blazeds服务端都是基于消息进行交流的,Flex组件使用几种消息和他们对应的服务交流。所有的消息有基于客户端的(ActionScript)和基于服务端(Java)的,因为这些消息分别在客户端和服务端序列化和反序列化。
一些消息,比如应答消息和命令消息,使用不同的Flex组件和Blazeds服务。其他的消息类型使用特殊的Flex组件和Blazeds服务。例如消息生产者发送消息给消息消费者组件。
其他情况下,你不可以直接写代码构造和发送消息。例如,你只是使用远程组件(RemoteObject)调用远程方法远。远程组件创建一个远程消息封装给远程对象调用。返回的消息封装在一个ResultEvent中。

Blazeds服务端体系


Blazeds

服务就是一个包含J2EE Web应用程序的应用。Flex客户端通过通道发送请求到Blazeds服务的端点上。从端点开始,请求经过一些列的Java对象包括消息传播对象、服务对象、目标对象以及最终的适配器对象。适配器将请求实现为本地的、或者contacting a backend system或者远程服务例如JMS服务。下面展示了Blazeds服务体系





端点


基于服务的端点是通过MessageBrokerServlet启动的,需要在web.xml中配置的。除此之外,HTTP session监听器也要加入到web程序的web.xml中。

<servlet>

<servlet-name>MessageBrokerServlet</servlet-name>

<display-name>MessageBrokerServlet</display-name>

<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>

<init-param>

<param-name>services.configuration.file</param-name>

<param-value>/WEB-INF/flex/services-config.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>


客户端程序使用通道和Blazeds端点通信。端点和通道是相互映射的,保持端点和通道使用相同的消息格式是很重要的。如果通道使用AMF消息格式,比如AMFChannel,端点也必须AMF消息格式与之匹配,比如AMFEndpoint。


你可以在WEB-INF/flex目录下的services-config.xml配置端点。


MessageBroker

MessageBroker是为了将消息路由给服务端,是Blazeds在服务端的核心。在端点经过初步的处理请求并且将提炼出来的消息传递给MessageBroker。MessageBroker查看消息的目的地,然后将他传递过去。如果目的地有安全现在,他就在传递之前运行检查证明。


服务和目的地

服务和目的地是消息在Blazeds服务中传递处理的下一站。系统包括4个服务以及他们对应的目的地:

RemotingService(远程服务) 和 RemotingDestination(远程目的地)


HTPProxyService(HTTP

代理服务) and HTTPProxyDestination(HTTP代理目的地)
MessageService(消息服务) and MessageDestination(消息目的地)


服务是消息传递过来的目标,可以将目的地想象成服务的实例。例如,远程组件和远程服务通信中,你必须指定一个远程目标,例如你要调用的类的方法。这种客户端和服务端的映射是按照下面来实现的:

HTTPService 和 WebService HTTPProxyService/HTTPProxyDestination通信

RemoteObject和 RemotingService/RemotingDestination通信

Producer、Consumer和 MessageService/MessageDestination通信

你可以在sevices-confi.xml中配置服务和目的地,但是最好是将他们放进不同的文件:
RemotingService配置在remoting-confi.xml
HTTPProxyService配置在proxy-config.xml
MessageService配置在messaging-config.xml


适配器和”随机”的编译是消息处理链中的最后一环。当一个消息抵达正确的目的地以后,它就会被传递给适配器被实现成本地的或者后台系统或者一个远程服务(JMS)。Blazeds使用如下的方式在适配器和目的地间映射

RemotingDestination uses JavaAdapter
HTTPProxyDestination uses HTTPProxyAdapter or SOAPAdapter
MessageDestination uses ActionScriptAdapter or JMSAdapter

http://chatgpt.dhexx.cn/article/1JEms9YQ.shtml

相关文章

MySQL配置Amoeba中间件

MySQL配置Amoeba中间件 Amoeba介绍环境配置安装Amoeba配置Amoeba配置文件配置dbServers.xml&#xff0c;设置数据库&#xff0c;登录MySQL的账号和密码 启动Amoeba注意事项 Amoeba介绍 Amoeba是一个以MySQL为底层数据存储&#xff0c;并对应用提供MySQL协议接口的proxy。它集中…

MySQL主从复制和基于Amoeba的读写分离部署

文章目录 MySQL主从复制和基于Amoeba读写分离什么是主从复制&#xff1f;为什么要有MySQL主从复制&#xff1f;什么是读写分离&#xff1f;一、MySQL主从复制原理二、主从复制的工作过程三、主从复制方式1、异步复制方式2、半同步复制/增强半同步复制3、全同步复制4、多线程复制…

amoeba mysql下载_amoeba数据库中间件透明实现MYSQL读写分离

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层&#xff0c;它主要在应用层访问MySQL的 时候充当SQL路由功能&#xff0c;专注于分布式数据库代理层(Database Proxy)开发。座落与 Client、DB Server(…

mysql amoeba_MySQL基于Amoeba实现读写分离

读写分离应用分析&#xff1a; 在企业用户中&#xff0c;在大量的数据请求下&#xff0c;单台数据库将无法承担所有读写操作。解决方法: 配置多台数据库服务器以实现主从复制读写分离。 1、基于程序代码内部实现 在代码中根据select、 insert 进行路由分类&#xff0c;这种方法…

mysql amoeba 配置_Amoeba新版本MYSQL读写分离配置

官方简介 Amoeba的中文意思是变型虫 主要解决&#xff1a; • 降低 数据切分带来的复杂多数据库结构 • 提供切分规则并降低 数据切分规则 给应用带来的影响 • 降低db 与客户端的连接数 • 读写分离 个人简单描述 可能你还没明白Amoebla这鬼东西主要干麻的呢&#xff01;比方说…

amoeba mysql_Mysql 基于 Amoeba 的 读写分离

首先说明一下amoeba 跟 MySQL proxy在读写分离的使用上面的区别&#xff1a; 在MySQL proxy 6.0版本 上面如果想要读写分离并且 读集群、写集群 机器比较多情况下&#xff0c;用mysql proxy 需要相当大的工作量&#xff0c;目前mysql proxy没有现成的 lua脚本。mysql proxy根本…

amoeba mysql binary_amoeba安装与实现amoeba for mysql读写分离

运行环境 l CentOS6.3 l Jdk1.6.0_30 l amoeba-mysql-binary-2.2.0 l amoeba&#xff1a;192.168.88.17 l master1&#xff1a;192.168.88.10 l slave1&#xff1a;192.168.88.11 一&#xff1a; 安装jdk1.5以上版本 1.1 卸载centos服务器自带版本jdk 1.1.1 …

amoeba-mysql主从复制配置

amoeba-mysql主从复制配置 主mysql192.168.8.186 1. 同步时间ntpdate ntp.org.cn 2. 打开mysql配置文件/etc/my.cnf&#xff0c;在mysqld下添加 a) log-binmaster-bin ---------启动二进制日志系统 b) server-id1 ---------服务id&#xff0c;主服务器server-id比从服务器serv…

mysql amoeba 事务_MySQL-Amoeba

Amoeba 变形虫 Amoeba 变形虫服务默认端口号8066 该软件能识别读写请求&#xff0c;把读写请求分配到不同的后端MySQL服务器 不用像MySQL-router用端口进行区分读写。 实验: 为了查看读写分离效果 本实验就不配置主从复制 1、 首先IP规划 amoeba:192.168.1.76 master:192.168.1…

amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离

内容概览&#xff1a; 1、mysql-proxy实现Mariadb读写分离 1、1 拓扑图和环境介绍 1、2 mysql-proxy安装 1、3 设置mysql-proxy 1、4 主节点添加mysql-proxy可访问用户 1、5 读写分离验证 2、amoeba 2、1 amoeba工作原理图 2、2 环境拓扑 2、3 配置JAVA环境 2、4 安装配置amoeb…

amoeba mysql_使用Amoeba 实现MySQL DB 读写分离

Amoeba(变形虫)项目是一个开源框架&#xff0c;于2008年开始发布一款 Amoeba for MySQL软件&#xff1b; 这个软件致力于MySQL的分布式数据库前端代理层&#xff0c;它主要在应用层访问MySQL的时候充当SQL路由功能&#xff0c;专注于分布式数据库代理层(Database Proxy)开发&am…

amoeba mysql_mysql中间件-amoeba

中间件&#xff1a;一种提供在不同技术、不同的软件之间共享资源的程序&#xff0c;更大化了利用了数据库的性能&#xff0c;可以无限扩展(注&#xff1a;真实环境中并非如此) 数据库的中间件&#xff1a; mysql proxy (官方版本)性能低&#xff0c;需要lua 脚本 atlas 性能低&…

Amoeba

1.介绍 Amoeba是mysql代理&#xff0c;增强mysql。类似的产品还有MyCat &#xff08;mysql代理&#xff09; 2.资源&#xff1a;点击打开链接c82k 3.准备&#xff1a;amoeba是基于java的所以必须有jdk 4.上传amoeba 5.解压tar包 6.配置文件 amoeba配置文件两个 dbServer…

Mysql基于Amoeba_读写分离搭架

一、Amoeba简介 Amoeba是一个以MySQL为底层数据存储&#xff0c;并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求&#xff0c;依据用户事先设置的规则&#xff0c;将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求&#xff0…

mysql基于Amoeba(变形虫)实现读写分离

一&#xff0c;Amoeba介绍 1、什么是amoeba&#xff1f; ​ Amoeba(变形虫)项目&#xff0c;专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据…

Amoeba:开源的分布式数据库Porxy解决方案

什么是Amoeba? Amoeba(变形虫)项目&#xff0c;该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层&#xff0c;它主要在应用层访问MySQL的 时候充当SQL路由功能&#xff0c;专注于分布式数据库代理层&#xff08;Database …

findbugs html报告,利用findBugs插件来扫描代码,并用ant生成报告

最近项目要用findbugs插件来生成报告&#xff0c;总结了一下用法和如何生成报告 1&#xff0c; 把下载的压缩包解压后&#xff0c;把 copy到eclipse的plugin目录中去&#xff1b; 2&#xff0c; 重新启动eclipse 3&#xff0c; 打开eclipse->window->Preferences&#xf…

AS之Findbugs

一 前言 Findbugs是由 National Science Foundation支持的一个用静态分析的方式来寻找Java代码中Bug的项目&#xff0c;它是一个静态分析工具&#xff0c;它检查类或者jar文件&#xff0c;将字节码和一组缺陷模式进行对比以发现可能的问题。有了静态分析工具&#xff0c;就可以…

AndroidStudio中FindBugs的简单使用教程

对于代码质量的检查&#xff0c;一直是一个比较棘手的问题。虽然我们部门有关于java代码的各种规范&#xff0c;领导也多次强调对代码的评审。 但是在实际执行过程中&#xff0c;由于开发人员的水平参差不齐&#xff0c;在开发项目时还有各种其他因素&#xff0c;比如时间紧任…

maven项目集成findbugs详解

文章目录 0、概述一、接入方式二、如何使用方式一、在控制台中执行打包命令方式二、使用IntelliJ IDEA的maven工具&#xff08;其他IDE用户忽略&#xff09; 三、bug详情查看四、忽略指定的包、类、类中的方法步骤一、在pom.xml中 增加配置。步骤二、增加配置文件&#xff0c;用…