1. MQ 之 为什么,何时使用ActiveMQ
1.2使用ActiveMQ:为什么,何时
时间回到2003年,一群开源开发者集合在一起形成了Apache Geronimo。之后,他们发现当前没有好用的使用BSD-style许可协议的消息代理器。Geronimo是由于java EE兼容性需要一个JMS实现。所以一些开发者开始讨论其可能性。拥有丰富MOMs经验甚至自己创建过一些MOMs的这些开发者开始创建下一个伟大的开源消息代理。ActiveMQ这么快开始是因为当时市场上大多数的MOMs是商业,闭源而且购买和支持昂贵。市场上的MOMs已经广泛地被使用,但是一些商业行为是买不起如此昂贵的软件。这使得创建一个开源MOMs的需求更加大。很明显,有一个市场急需一个开源的使用Apache License的MOM。最终就导致了Apache ActiveMQ的诞生。
ActiveMQ遵循JMS规范,是为分布式应用远程交流而创建的。为了理解这目的,最好就是去看一些分布式应用的设计和是交互。
1.2.1松耦合与ActiveMQ
ActiveMQ提供松耦合的应用架构。松耦合一般是为了减轻经典RPC(Remote Procere Calls)调用的紧耦合架构而被引入的。该松耦合以异步形式存在,任何一个应用对ActiveMQ的调用不依赖于任何其它应用,没有任何依赖或者时序要求。应用依赖于ActiveMQ的能力保证消息传递。因此,我们把应用发送消息的形式称之为触发和忘记(fire-and-forget)--应用发送消息到ActiveMQ之后并不关心消息如何或者什么时候被传递。同样的消息的接收者也不关心消息从哪里或者如何到来。在不同的环境中这样做的好处是允许客户端使用不同的语言编写甚至使用不同的线路协议。ActiveMQ作为中间人存在,允许不同环境的集成和异步交互。更多内容将在下一节论述。
当我们考虑分布式应用设计时,耦合是很重要的。耦合是指两个或多个应用间的相互依赖。考虑耦合的一个简单办法是思考其中某个应用改变所产生的影响,即其它应用所需要作出的改变。是否一个应用的变化会强制其它应用跟着改变?如果答案是肯定的,则这些应用是紧耦合的。如果一个应用的变化无需强制其它应用跟着改变,则这些应用是松耦合的。这说明了紧耦合系统比松耦合系统更难维护。也就是说,松耦合系统更能适应未知的变化。
在第二章我们将讨论COM,CORBA,DCE和EJB等使用RPC的技术,它们是紧耦合的。使用RPC,当一个应用调用另一个应用,调用者将被阻塞知道被调用者返回结果。图1.1描述了这个过程。
2. 消息队列(mq)是什么
是生产者先将消息投递一个叫队列的容器中,然后再从这个容器中取出消息,最后再转发给消费者。
消息队列是 Microsoft 的消息处理技术,它在任何安装 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。
消息队列网络是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。
消息队列的类型介绍:
消息队列目前主要有两种类型:POSIX消息队列以及系统V消息队列,系统V消息队列目前被大量使用。每个消息队列都有一个队列头,用结构struct msg_queue来描述。队列头中包含了该消息队列的大量信息。包括消息队列键值、用户ID、组ID、消息队列中消息数目等等。
消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。消息队列是随内核持续的。
3. mq 能用于c编程么
PCF就支持C呀!
MQ还提供了系统管理的编程接口,通过该接口用户可以编写应用程序从而进行自动化的实时监控及管理。MQ的系统管理接口有两种,即Programmable Command Format(可编程命令格式,简称PCF)和MQ Administration Interface(MQ管理接口,简称MQAI)。
关于WebSphere MQ 可编程命令格式(PCF)
WebSphere MQ 可编程命令格式(PCF)命令使得管理任务能编写到应用程序中,在程序中可以创建队列、进程等对象的定义以及更改对象的属性等。
PCF定义了命令和回复消息,应用程序通过这些命令和回复消息实现和队列管理器之间的信息交换,PCF 命令和MQSC 命令具有相同的命令集,所有通过MQSC命令能够实现的功能,通过PCF都可以实现,因此,通过WebSphere MQ的应用程序可以实现对MQ对象的管理包括:队列管理器,进程定义,队列和通道等。PCF命令可以被发送到本地队列管理器的命令队列,也可以被发送到某个远程队列管理器的命令队列,因此,应用程序可以通过一个本地队列管理器集中管理网络中的任何本地和远程管理器。
MQ的远程管理机制底层就是通过PCF这种方式的,在互相联接的系统中的任意一个节点都可以进行对其他所有节点的配置和管理,这种情形的典型应用就是通过一台Windows操作系统的机器来管理全网的MQ节点。由于MQ在Windows XP/NT/2000平台上提供了图形界面的管理工具,我们可以把一个节点设成管理机,利用管理机可以监控和配置网络中的任一节点,监测和显示整个网络中任何一个节点上的服务器及其各种对象的状态和运行情况,从而实现对中间件的集中管理和监控。
每一个队列管理器有一个名为SYSTEM.ADMIN.COMMAND.QUEUE的管理队列,应用程序可以按照PCF命令消息格式封装的要求,组成PCF消息,并将该PCF命令消息发送到管理队列中,同时,每一个队列管理器也有一个命令服务器(Command Server),它为管理队列中的消息提供服务,在我们使用MQ的控制命令strmqcsv启动命令服务器之后,它将监控管理队列,一旦该队列中有PCF消息到达,它将读取该消息,并解释执行。因此在网络中的任何队列管理器都可以处理PCF消息,通过使用指定的回复队列,回复消息可以被返回给应用程序,应用程序可以获知PCF命令执行成功与否。回复队列由命令消息的消息描述符(MQMD)中的ReplyToQ和ReplyToQMgr两个字段来指定。
PCF命令和回复消息是使用MQ相应的编程接口进行发送和接收的,以C语言为例,我们只需要使用MQPUT将PCF命令消息发送到相应的管理队列,使用MQGET将PCF回复消息从相应的回复队列中取出即可。这里的关键就是如何封装PCF消息。每个MQ指令及其相关参数都是一条单独的命令消息,每个命令消息由PCF头和若干个参数结构块组成,每个参数结构块提供了命令的参数。回复消息的结构与命令消息相同,但是回复消息的个数根据不同的情况可能会有多个,例如:如果我们查询某个队列管理器下所有本地队列的属性,假设本地队列有10个,那么我们将得到10个回复消息,PCF头中的Control字段MQCFC_NOT_LAST和MQCFC_LAST将用于区分是否为最后一个回复消息。
PCF编程接口支持C,Visual Basic, COBOL, RPG, PL/1和Java等,其中在我们最常用的编程语言中,C和Visual Basic编程在PCF的封装上相对Java将会略微复杂一些
4. IBM MQ是什么
IBM MQ
消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
IBM WebSphere MQ 产品支持应用程序通过不同组件如处理器、子系统、操作系统以及通信协议的网络彼此进行通信。例如,IBM WebSphere MQ 支持 35 种以上的不同操作系统。
IBM WebSphere MQ 支持两种不同的应用程序编程接口:Java 消息服务(JMS)和消息队列接口(MQI)。在 IBM WebSphere MQ 服务器上,JMS 绑定方式被映射到 MQI。如图 3 所示,应用程序直接与其本地队列管理器通过使用 MQI 进行对话,MQI 是一组要求队列管理器提供服务的调用。MQI 的引人之处是它只提供 13 次调用。这意味着对于应用程序编程员它是一种非常易于使用的接口,因为大部分艰苦工作都将透明完成的
5. mql4编辑器设置语言
首先,进入“MQ语言编辑器”页面。
然后,新建一个EA交易,输入好命名,一路默认确定就好。
6. EX4文件 转 MQ4文件
一、如何将mq4文件转换为ex4文件,mq4文件编译为ex4可执行文件有两种方法:
1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。
2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮,即可生成ex4文件。
二、下载保存mq4文件、ex4文件
在论坛上我们经常看到有mq4文件、ex4文件可供下载,我们只要把它们保存到C:\Program Files\MetaTrader 4\experts\indicators这个目录,也就是下面这个目录中,就可以了。如果下载的是ex4文件,那可以直接调用;如果是mq4文件,则需要重启动MT4,让系统自动编译生成ex4可执行文件。如果下载的是rar、zip等类型的压缩文件,还必须下载后解压到此目录才能使用。
三、将源码保存为源码文件
外汇交易,在论坛上,我们也经常能看到指标源码贴在网页上,但没有mq4、ex4等文件可以下载,只能复制源码。此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。
1、打开MQ语言编辑器。
2、在MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。
3、删除新文件里面的所有内容,成为一个空文件。
4、接着我们就可以将网页上源码复制粘贴进来。
试着点一下“编写”,如果左下角出现“0错误,0警告”,那说明源码没问题,编译通过了,成功生成了ex4可执行文件。
5、还有很重要的一点,就是要把源码文件保存到正确的目录中。
7. MT4平台上如何把.ex4的文件转换为.mq4的文件
一、如何将mq4文件转换为ex4文件,mq4文件编译为ex4可执行文件有两种方法:
1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。
2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮,即可生成ex4文件。
二、下载保存mq4文件、ex4文件
在论坛上我们经常看到有mq4文件、ex4文件可供下载,我们只要把它们保存到C:\Program Files\MetaTrader 4\experts\indicators这个目录,也就是下面这个目录中,就可以了。如果下载的是ex4文件,那可以直接调用;如果是mq4文件,则需要重启动MT4,让系统自动编译生成ex4可执行文件。如果下载的是rar、zip等类型的压缩文件,还必须下载后解压到此目录才能使用。
三、将源码保存为源码文件
外汇交易,在论坛上,我们也经常能看到指标源码贴在网页上,但没有mq4、ex4等文件可以下载,只能复制源码。此时需要我们自己动手将源码保存为源码文件,那也没关系,非常地简单,多点几下鼠标就搞定。
1、打开MQ语言编辑器。
2、在MQ语言编辑器中新建一个文件,文件名一定要输,别的随便操作都没关系。
3、删除新文件里面的所有内容,成为一个空文件。
4、接着我们就可以将网页上源码复制粘贴进来。
试着点一下“编写”,如果左下角出现“0错误,0警告”,那说明源码没问题,编译通过了,成功生成了ex4可执行文件。
5、还有很重要的一点,就是要把源码文件保存到正确的目录中。
8. 如何用metatrader自带的编辑器metaeditor编译
1.首先,你要有一个EA,必须要有以ex4为扩展名的,如果只有mq4文件的话,就要用MetaTrader自带的编辑器MetaEditor打开(主菜单命令“工具—MQ语言编辑器”或者是快捷键F4完成同样操作),将mq4通过编译(compile)并且要不出现错误,才能在原存放mq4的文件夹下面得到一个同名的ex4文件。
2.将这个ex4文件复制到MetaTrader
4所在的文件夹下面的experts文件夹下,比如:C:\Program Files\FxPro
MetaTrader\experts,关闭并重新打开MetaTrader 4。
3.在“导航”下面的“智能交易系统”下面右键点击你想要使用的EA,这里以10点盈利系统举例,点“附加到图表”,如:
4.将会出现下面的弹出窗口:
特别要注意这里的选择,如果没有钩选“允许实时自动交易”,那么你的智能系统就不会自动交易。
5.在自动成交方面,MT4还有一个总开关,就是“工具”菜单下面的“选项”中:
6.还有一个地方必须选择“启动”:
上图最后面的变成这样的就是已经启动了智能交易系统。
7.在完成了上面的所有设置后,看看你的图表的右上角一定会出现你的智能交易系统的文件名和一个笑脸。
出现这样就算是当前的图表已经启用了智能交易系统了。这时,你就可以去睡觉或者去喝酒喝茶健身了。
8.如果你要停止你的智能交易系统,最好的办法是点击这个图上面的“智能交易”图标。
如果只要停止当前图表上面的EA,你应该按 F7
键,就会弹出如下的窗口:
点击将“允许实时自动交易”前面的钩去掉,然后确定,这样就使当前图表上面的EA停止了。图表上面会出现“哭丧的脸”: