HornetQ Topic/Queue for Clojure

1. HornetQ 概述

HornetQ是一个支持集群和多种协议,可嵌入、高性能的异步消息系统。HornetQ完全支持JMS,HornetQ不但支持JMS1.1 API同时也定义属于自己的消息API,这可以最大限度的提升HornetQ的性能和灵活性。在不久的将来更多的协议将被HornetQ支持。

2. HornetQ 特点

(1)HornetQ拥有超高的性能,HornetQ在持久化消息方面的性能可以轻易的超于其它常见的非持久化消息引擎的性能。当然,HornetQ的非持久化消息的性能会表现的更好!

(2)HornetQ完全使用POJO,纯POJO的设计让HornetQ可以尽可能少的依赖第三方的包。从设计模式来说,HornetQ这样的设计入侵性也最小。HornetQ既可以独立运行,也可以与其它Java应用程序服务器集成使用。

(3)HornetQ拥有完善的错误处理机制,HornetQ提供服务器复制和故障自动转移功能,该功能可以消除消息丢失或多个重复信息导致服务器出错。

(4)HornetQ提供了灵活的集群功能,通过创建HornetQ集群,您可以享受到到消息的负载均衡带来的性能提升。您也可以通过集群,组成一个全球性的消息网络。您也可以灵活的配置消息路由。

(5)HornetQ拥有强大的管理功能。HornetQ提供了大量的管理API和监控服务器。它可以无缝的与应用程序服务器整合,并共同工作在一个HA环境中。

注:以上摘自百度百科http://baike.baidu.com/view/4895723.htm?fr=aladdin

3. Topic 和 Queue的主要区别

首先我们来了解几个概念:

(1)destination(目的地):即消息发送的目的地,也是消息传递的通道。可以是Queue或者Topic。

(2)producer(生产者):即消息的产生者。消息的生产者只负责向destination(目的地)发送消息,扔下后就不管了,去干其他的事。而消息最终会被怎么处理,则取决于消息的消费者。

(3)consumer(消费者):即消息的消费者。消费者可以订阅(或者监听)某个destination,当其中有消息的到达时,可以对消息进行相应的处理。也可以根据消息的特征判断是否要接受此消息。

其实消息服务的大体流程很简单,消息生产者向消息队列(或主题)中发送消息,消费者从队列(或主题)中获取消息。生产者和消费者互不干扰。

下面就说说Topic和Queue的不同:

Queue:即消息队列。一个Queue可以有多个consumer对其进行listen(监听)。但是一条消息仅能被一个consumer收到,即如果一条消息被某个consumer相应掉了,那么其他consumer则收不到这条消息。另外,如果一条消息没有可用的consumer,那么这条消息会一直保存在Queue中,直到有consumer对它进行响应,即Queue的消息不会被丢失。Queue的消息传递模式是Point-to-Point(点对点)的传递模式。

Topic:即主题。消息发布者向主题publish(发布)消息,消费者则对主题进行subscribe(订阅)。一个Topic可以有多个consumer对其订阅。发布者发布的消息将会进行广播,订阅了该主题的消费者都能够收到这条消息(持有该消息的拷贝),并都能对消息做出响应。Topic中不能保证每条消息都能够被消费者者接收到。如果一条消息没有消费者在监听,则Topic会丢失。Topic的消息传递模式是Publish/Subcribe(发布/订阅)的模式。

4.  简单应用(使用Immutant 的API)

**用Queue实现异步消息队列

(1)创建消息队列:

(require ‘[Immutant.messaging :as m])

(def q (m/queue “test-queue”)

(2)发布消息

(m/publish q “a message”)

(3)自定义消息处理函数, 这里只是将消息简单打印出来

(defn msg-handle

[msg]

(prn msg))

(3)监听消息队列,注册处理函数

(def listener (m/listen q #(msg-handle %)))

(4)关闭监听

(stop listner)

(.close listener)

**用Queue实现同步消息队列

(1)定义消息队列

(def sync-q (m/queue “sync-q”)

(2)自定义消息应答方式

(def respinder (m/respond sync-q inc))

(3)发送消息

@(m/request sync-q 1)

注:request会一直等到消息得到响应才会返回,否则一直堵着不动。

**用Topic实现异步消息

(1)定义Topic

(def t (m/topic “test-topic”))

(2)发布主题消息

(m/publish t “a message”)

(3)订阅主题,注册处理函数

(m/subscribe t “subscriber-name”#(msg-handle %)

(4)取消订阅

(m/unsubscribe t subscriber-name)

时间: 2024-10-25 21:34:29

HornetQ Topic/Queue for Clojure的相关文章

MQ-传输方式Topic和Queue的对比

Jms规范里的两种message传输方式Topic和Queue,两者的对比如下表():   Topic Queue 概要 Publish  Subscribe messaging 发布订阅消息 Point-to-Point  点对点 有无状态 topic数据默认不落地,是无状态的. Queue数据默认会在mq服务器上以文件形式保存,比如Active MQ一般保存在$AMQ_HOME\data\kr-store\data下面.也可以配置成DB存储. 完整性保障 并不保证publisher发布的每条

ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息

实战一 , 实战二 介绍了ActiveMQ的基本概念和配置方式. 本篇将通过一个实例介绍使用spring发送,消费topic, queue类型消息的方法. 不懂topic和queue的google 之. 如图示, TOPIC和QUEUE分别代表一个topic和一个queue消息通道. TopicMessageProducer向topic发送消息, TopicConsumerA和TopicConsumerB则从topic消费消息. QueueMessageProducer向Queue发送消息, Q

RabbitMQ指南之五:主题交换器(Topic Exchange)

在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希望根据日志等级订阅日志,还希望根据日志来源订阅日志.这个概念来自于unix工具syslog,它不仅可以根据日志等级(info/warn/crit...)来路由日志,同时还可以根据设备(auth/cron/kern...)来路由日志.这将更加灵活,我们可能希望只监听来自'cron'的error级别日志

springmvc(18)使用WebSocket 和 STOMP 实现消息功能

[0]README 1)本文旨在 介绍如何 利用 WebSocket 和 STOMP 实现消息功能: 2)要知道, WebSocket 是发送和接收消息的 底层API,而SockJS 是在 WebSocket 之上的 API:最后 STOMP(面向消息的简单文本协议)是基于 SockJS 的高级API (干货--简而言之,WebSocket 是底层协议,SockJS 是WebSocket 的备选方案,也是 底层协议,而 STOMP 是基于 WebSocket(SockJS) 的上层协议) 3)b

ActiveMQ在C#中的应用

ActiveMQ是个好东东,不必多说.ActiveMQ提供多种语言支持,如Java, C, C++, C#, Ruby, Perl, Python, PHP等.由于我在windows下开发GUI,比较关心C++和C#,其中C#的ActiveMQ很简单,Apache提供NMS(.Net Messaging Service)支持.Net开发,只需如下几个步骤即能建立简单的实现.C++的应用相对麻烦些,稍后写文章介绍. 1.去ActiveMQ官方网站下载最新版的ActiveMQ,网址:http://a

weblogic的集群与配置

目录(?)[-] 1.Weblogic的集群 2.创建Weblogic集群前的规划 3.开始创建我们的Weblogic集群 1.1 创建集群的总控制端aminserver 2.2 创建集群中的节点mycluster1 mycluster2 3.3 如何启动集群 4.jdbc集群 5.把工程布署到集群环境中去 6.使用Apache与Weblogic集群整合 7.JMS集群 本文转摘于:http://blog.csdn.net/liuqiwen0512/article/details/7739421

Weblogic的集群

<收藏自http://www.cnblogs.com/HondaHsu/p/4267972.html> 一.Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2,使用Apache HttpServer做请求派发. 现在看看WebLogic的集群吧,其实也差不多. 区别在于: Tomcat的集群的实现为两个物理上不同的tomcat,分别就是两个node,没有总控端,没有任何控制台可言(只有通过比较简陋的ht

【转】Spring websocket 使用

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html https://spring.io/guides/gs/messaging-stomp-websocket/ https://github.com/rstoyanchev/spring-websocket-portfolio 项目中用到了消息的实时推送,查资料后用到了Spring websocket,找了很多资料,还是感

AJAX驱动的单页应用-Pub/Sub

有三样东西对AJAX驱动的单页应用很关键:时间委托.历史管理和通信模式(Pub/Sub). 首先让我们介绍一下Pub/Sub是个什么东西.我们可以把这个东西叫做广播,大概的意思就是当你发布了一个东西,那么其他的人就都能收到了.你可以想一下,一般说来在单页应用中,是高度模块化.那么就会涉及到一个通信的问题,按照以往的方式,我们会声明一个特定的对象,这个对象是专门用来作为模块之间的通信的.在使用了Pub/Sub之后,模块之间的通信就会是直接的通信,这样就能使结构变得清晰. PS:这种机制在angul