`
darklipeng
  • 浏览: 126166 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

ActiveMQ 消息中间件报告

    博客分类:
  • jms
阅读更多

ActiveMQ 消息中间件报告

                                                       简介

ActiveMQ是一个开放源码基于Apache 2.0 licenced 发布并实现了JMS 1.1。它能够与Geronimo,轻量级容器和任Java应用程序无缝的给合。

       下载地址 :http://activemq.apache.org

启动ActiveMq

下载ActiveMq (我用的是4.1版本)

解压 apache-activemq-4.1.1.zjip

在  apache-activemq-4.1.1\apache-activemq-4.1.1\bin 目录下有个activemq.bat,启动它即可。

点对点(point-to-point, P2P)

在 P2P 模型中,发送者分发消息到 queue (队列)中,queue 中的一条消息只能被一个接受者接收,接收者不需要在消息发送的同时监听该queue。消息会一直保存在队列里直到被取走。

发布/订阅(publish/subscribe, Pub-Sub)

       Pub-Sub消息模型是一对多的模型,即一条消息会被多个接收者接到。发布者将消息发送到topic,该topic 的所有活动订阅者将接收该消息。没有监听该topic的非活动订阅者将错过这个已发布的消息。如果没有监听该topic的非活动订阅者也想接收到它订阅的、发布到该topic所有消息,可以使用消息持久化来实现。消息持久化将在下面介绍

消息持久化

       ActiveMQ很好的支持了消息的持久性(Persistence)。消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去。

      消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试。消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。  
      对于ActiveMQ,消息的持久化使用是很简单的,仅仅通过配置信息就可以实现。这里主要介绍两种不同的持久化方法。

 

l         High performance journal

      这是ActiveMQ基于开源的HOWL(High-speed ObjectWeb Logger),将HOWL扩展为可以存储任意大小的消息(HOWL只能存储固定大小的记录),实现的一种消息持久化方法。它可以快速的将消息存储在本地文件中,且这种文件是以一种类似数据库的方式管理的。这样,如果你发送了10,000个消息,可能只有很少数的消息没有发送成功,当达到一个 checkpoint的时候,journal将一批未成功消息通过JDBC存储到数据库,这样避免了多次的数据库操作,很大程度上提高了性能并且保证了可靠性。  
      配置方法非常简单,就是无需配置,呵呵。ActiveMQ默认支持Journal,在activemq.xml配置文件中,可以找到如下信息:

 

这里可以改动的就是journalLogFiles,这个属性是制定默认创建几个数据文件来存储消息。journalLogFileSize为数据文件大小,默认为20MB。dataDirectory指向了存储数据文件的位置。

 

l         使用Oracle进行消息持久化  
      ActiveMQ持久几乎所有数据库(因为是通过JDBC把消息存储到数据库的)。方法同样简单,就是配置信息稍微有点变化。

 

 

其中dataSource指定了所用数据源的名字为oracle-ds。需要在activemq.xml文件中的<broker>标签之外配置数据源。下面是oracle的配置信息。

 

这样,消息中心具有了消息持久化功能,还需要做的就是消息发送者在发送消息的时候要采用JMS中的PERSISTENT模式发送消息。示例代码如下:

消费者端负载平衡

       ActiveMQ 特性之一是可以在消费者端进行负载平衡,消息组是一种不太为人所知的 JMS 可选特性。“它有点儿像 Web 应用程序的负载平衡,但是应用于消息传递,假设我们将来自某站点的商品订单放进一个队列中,希望尽可能快地处理它们。JMS 提供者会在消费者之间根据负载平衡原则分配这些消息。

消息集群

       ActiveMQ支持多个 Broker集群,假设我们的Broker分别在不同节点上,消息发布者在创建连接的时候URL使用 “failover:url1,url2,url3”

    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(“failover:tcp:localhost:61616,tcp:192.168.10.5:61616”);

   

假设现在有 1组Broker,每个Broker都在不同的节点上,1个消息发布者,每个Broker对应两个消息接收者

 

1、  任意一个消息接收者停止都不会影响整个工作。

2、  如果有一个Broker停机,那么该Broker对应的消息接收者也会停止工作,这时候消息发送会阻塞,使用TransportListener 可以解决这个问题。

3、  ActiveMQ 多个Broker集群的负载均衡目前为止有些缺陷,即一个Broker停机后,如果该Broker对列里还有没有被消费者消费的消息,那么这些消息不会分发给其他broker,如果做了消息持久化,那么该broker再次启动后那些消息还可以被消费者消费.如果没有做持久化,消息会丢失。

官方文档上说 通过 Master Slave 方式集群可以解决这个问题,实现Master Slave集群可以通过

1 Pure Master Slave

Shared File System Master Slave

3 JDBC Master Slave

其中前两种需要硬件来配合,硬件价格是相当昂贵的

第3种是通过数据库存储实现,这样会给数据库造成很大的压力,而且当前对mysql数据库的支持不是很好(测试过)

 

总之,经过了一段时间的研究和测试,发现 ActiveMq 还不是特别成熟,对于单点故障不能做很好的处理。于是我们换 jobss jms集群了,经过测试后发现比ActiveMQ要稳定,不过对于单点故障的处理也有些缺陷。单点故障好像是个死穴,呵呵。

 

转载地址:http://blog.sina.com.cn/s/blog_4d720f0701000b35.html

分享到:
评论

相关推荐

    【Java学习】activemq消息中间件学习demo.zip

    【Java学习】activemq消息中间件学习demo.zip 【Java学习】activemq消息中间件学习demo.zip 【Java学习】activemq消息中间件学习demo.zip

    ActiveMQ消息中间件学习.zip

    ActiveMQ消息中间件学习

    ActiveMQ消息中间件面试专题.pdf

    Apache ActiveMQ是一个开源的消息中间件,它属于Apache软件基金会。ActiveMQ旨在提供一种可靠的消息传递机制,以支持应用程序之间的异步通信。作为面向消息的中间件(MOM),ActiveMQ实现了JMS(Java Message ...

    38 4 ActiveMQ消息中间件视频教程

    教程视频:Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件

    ActiveMQ消息中间件面试专题(1).pdf

    ActiveMQ消息中间件面试专题

    ActiveMQ消息中间件.zip

    ActiveMQ是中国开源软件Apache下的一个项目,它是Java消息服务(JMS)的实现,作为一个高效、灵活且可扩展的消息中间件,它在分布式系统中扮演着至关重要的角色。本资料包"ActiveMQ消息中间件.zip"包含了关于...

    JMS+activeMQ消息中间件

    **ActiveMQ**是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,为应用程序提供了一个中间件,允许应用程序之间进行异步的消息通信。ActiveMQ支持多种协议,如OpenWire、AMQP、STOMP、MQTT等,适用于多种...

    activemq消息中间件-视频教程

    《ActiveMQ消息中间件——视频教程》是一套专注于讲解Apache ActiveMQ这一开源消息中间件的教育资源。本教程通过视频的形式,深入浅出地介绍了ActiveMQ的核心概念、功能特性以及实际应用,旨在帮助学习者掌握消息...

    ActiveMQ消息中间件面试题.pdf

    ### ActiveMQ消息中间件知识点详解 #### 一、ActiveMQ简介 **ActiveMQ**是一款流行的开源消息中间件,它遵循JMS(Java消息服务)1.1标准,为应用程序提供了高效、可扩展、稳定和安全的企业级消息通信能力。作为一款...

    ActiveMQ消息中间件面试专题1

    【ActiveMQ消息中间件面试专题】深入解析 1. 什么是 ActiveMQ? ActiveMQ 是一个开源的、基于 Java 的消息中间件(MOM),它遵循 JMS 1.1 规范,为开发者提供了高效、可扩展、稳定和安全的企业级消息通信能力。通过...

    【面试资料】-(机构内训资料)ActiveMQ消息中间件面试题.zip

    **ActiveMQ 消息中间件面试题解析** ActiveMQ 是 Apache 开源项目中的一款高性能、高可用的消息中间件,广泛应用于分布式系统中的消息传递。它支持多种消息协议,如 OpenWire、AMQP、STOMP、MQTT 和 JMS,使得不同...

    activeMQ消息中间件入门示例,行行注释

    ActiveMQ是中国最流行的开源消息中间件之一,它基于Java Message Service (JMS) 规范,为应用程序提供了异步通信的能力。在这个“activeMQ消息中间件入门示例”中,我们将探讨如何设置基本的生产者和消费者来实现...

    ActiveMQ消息中间件应用技术交流

    ### ActiveMQ消息中间件应用技术交流 #### 概述与背景 在当今的软件开发领域,尤其是Java开发中,消息中间件的应用日益广泛,成为构建复杂分布式系统的关键技术之一。ActiveMQ作为Apache基金会下的开源项目,是...

    ActiveMQ消息中间件面试专题.zip

    这份面试专题资料的特点如下: 全面覆盖ActiveMQ相关知识点:...总之,"ActiveMQ消息中间件面试专题"是一份非常有用的面试专题资料,对于想要提高应聘成功率和掌握ActiveMQ相关知识点的人来说,是一份不可多得的资料。

    ActiveMQ 消息中间件

    基于ActiveMQ的消息中间件 Workspace1\2\3\4分别对应消息生产者、消费者、日志appender、和demo 同时具有METAR报文的译码功能,日志记录功能。 日志记录功能请在properties中进行配置

    ActiveMQ消息中间件面试专题、Dubbo的过去、现在以及未来

    【ActiveMQ消息中间件面试专题】 ActiveMQ是Apache软件基金会下的一个开源项目,它是一款功能强大的消息中间件,广泛应用于分布式系统中。ActiveMQ的主要作用是实现应用间的解耦,提高系统的可扩展性和容错性。在...

Global site tag (gtag.js) - Google Analytics