1、在Linux中安装ActiveMQ

官方文档地址:http://activemq.apache.org/getting-started.html#GettingStarted-StartingActiveMQStartingActiveMQ

(1)、(Ubuntu中)先更新,执行 sudo apt-get update

(2)、需要Java环境,使用java –version命令显示版本信息,没有JAVA自己安装配置去 - -

(3)、 下载activemq,执行: wget http://activemq.apache.org/path/tofile/apache-activemq-x.x.x-bin.tar.gz

(4)、解压,执行: cd [activemq_install_dir]      tar zxvf activemq-x.x.x-bin.tar.gz

(5)、运行 :cd [activemq_install_dir]/bin   ./activemq start(我这步没有成功,然后看文件目录下有linux-x86-32/linux-x86-64,我是64位系统,然后进入linux-x86-64下,执行./activemq start,运行成功!

(6)、输入HTTP://IP:8161  admin  admin进入管理!  一定要输入HTTP://   一定要输入HTTP://    一定要输入HTTP://  才能访问!!

 

2、使用延时消息特性 

(该部分转自:http://www.voidcn.com/blog/doffs/article/p-2407882.html) 

关于MSMQ和ActiveMQ的基础功能就不再描述。这里说说ActiveMQ的比较实用的一个功能:ScheduledMessage

ScheduledMessage可以理解为一个调度功能,可以延时、重复发送消息。我就是采用这种方案来实现Web中的定时功能和系统中不同模块之间的消息传递。

这里主要说一下延时消息的新增、删除操作(坑啊官方API里面貌似没有这一个功能的描述,只有一全案例,而案例上所用到的东西,在NuGet上下载的dll根本没有这一个类)。

要使用Scheduled功能需要在服务端conf/activemq.xml中把Scheduled打开,根据官网上的提示,是需要在broker上面添加一个schedulerSupport="true"属性,配置好后,重启服务。

<!--
        The <broker> element is used to configure the ActiveMQ broker.
    -->
    <broker schedulerSupport="true" xmlns="http://activemq.apache.org/schema/core"

延时消息发送:

  1. IConnectionFactory factory = new ConnectionFactory("tcp://192.168.1.248:61616/");
  2. using (IConnection connection = factory.CreateConnection())
  3. {
  4. using (ISession session = connection.CreateSession())
  5. {
  6. IMessageProducer prod = session.CreateProducer(
  7. new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("testing"));
  8.  
  9. ITextMessage msg = prod.CreateTextMessage();
  10. msg.Text = "这是一个延时消息";
  11. msg.Properties.SetLong("AMQ_SCHEDULED_DELAY", 3600000); //这里设置一个延时发送,后面是延时单位是ms,
  12. prod.Send(msg);
  13. Console.WriteLine(msg.NMSMessageId);//发送成功后,NMSMessageId将会被赋值,如果需要删除单条消息需要把这个记录下来
  14.  
  15. }
  16. }

发送成功后,在服务器上可以看到这个延时消息

删除这个延时消息:

  1. IConnectionFactory factory = new ConnectionFactory("tcp://192.168.1.248:61616/");
  2. using (IConnection connection = factory.CreateConnection())
  3. {
  4. using (ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
  5. {
  6. IDestination management = session.GetDestination("ActiveMQ.Scheduler.Management");
  7. connection.Start();
  8. IMessageProducer producer = session.CreateProducer(management);
  9. IMessage request = session.CreateMessage();
  10.  
  11. request.Properties.SetString("AMQ_SCHEDULER_ACTION", "REMOVE");//指定当前消息是来删除某个延时消息
  12. request.Properties.SetString("scheduledJobId", id);//指定要删除的延时消息的ID、这个ID就是刚刚发送成功时返回的ID
  13. producer.Send(request);
  14.  
  15. }
  16. }

参考资料

http://www.programcreek.com/java-api-examples/index.php?api=javax.jms.MessageListener

http://activemq.apache.org/maven/apidocs/src-html/org/apache/activemq/ScheduledMessage.html#line.64

发送延时消息的简单封装:

  1. /// <summary>
  2. /// 发送文本延时消息
  3. /// </summary>
  4. /// <param name="messageProducer">The message producer.</param>
  5. /// <param name="msg">消息内容</param>
  6. /// <param name="delayTime">延时时间(单位秒)</param>
  7. /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
  8. public bool SendScheduledTextMessage(IMessageProducer messageProducer, string msg, long delayTime)
  9. {
  10. try
  11. {
  12. var message = messageProducer.CreateTextMessage();
  13. message.Properties.SetLong("AMQ_SCHEDULED_DELAY", delayTime * 1000);
  14. message.Text = msg;
  15. messageProducer.Send(message);
  16. return true;
  17. }
  18. catch (Exception)
  19. {
  20. return false;
  21. }
  22. }

3、Send参数说明

Send方法:

  1. message.Send(msg, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);
    //第一个参数:消息的内容(byte或者是string)
    //第二个参数:消息的持久化方式,这里为不进行持久。(如果为持久,可通过ActiveMQ的配置文件,配置ActiveMQ持久化的方式和位置)
    //第三个参数:优先级(优先级为0-9,0最低,9最高)。这里使用的是Normal,为5
    //第四个参数:为该条消息的过期时间,默认为0,永不过期。若设置过期时间,则消息超过设置的时间不处理,则会被丢弃到DLQ(Dead Letter Queue)队列。详细说明可参考:http://sharong.iteye.com/blog/1987171

4、获取ActiveMQ队列里的消息个数

这个一直在研究,但是迟迟搞不定。中文社区的资料里,基本都是JAVA的资料,使用JMS规范去获得,暂未发现.NET方面的资料。

所以暂附上现阶段的研究成果吧。

1、在官方的文档里,提到了如何获取这些信息。地址:http://activemq.apache.org/how-can-i-monitor-activemq.html

  根据文档发现首推的就是使用JMS,然后还有网页控制台,命令行,插件等等。不过依然没什么头绪。

2、在Stack Overflow上找到了一个相关问题,链接:http://stackoverflow.com/questions/7512004/activemq-with-c-sharp-and-apache-nms-count-messages-in-queue  。

  (1)、根据问题的提示,是建立一个Browser,通过他一直去取消息,取到多少个代表队列里还有多少消息。暂不评论合不合适。  当我在使用的时候,发现每次都是只能取到一个。经过仔细研究之后,发现建立队列的时候,他的Message ID不同,用这种方法去取的时候,只能获取当前Message ID下的消息,所以每次都是一个。

  (2)、全局所有关于Activemq的都是使用单例模式,然并卵。。。依旧无果

  (3)、是不是配置的问题,只能访问到当前MessageID的消息?(这是一个问题)

3、最简单粗暴的方法,既然在8161控制台里能看到个数,那么直接HTTP请求,分析RSS页面内容。。你们懂的。。   http://127.0.0.1:8161/admin/queueBrowse/[队列名]?view=rss&feedType=atom_1.0

ActiveMQ使用记录的更多相关文章

  1. 【ActiveMQ】Spring Jms集成ActiveMQ学习记录

    Spring Jms集成ActiveMQ学习记录. 引入依赖包 无论生产者还是消费者均引入这些包: <properties> <spring.version>3.0.5.REL ...

  2. centos6下ActiveMQ+Zookeeper消息中间件集群部署记录

    由于最近一个项目并发请求压力比较大,所以考虑改进架构,引入消息中间件集群作为一个缓冲消息队列,具体需求:1)将大量的WebService请求报文发送到mq集群之中,并保持消息先后顺序2)保证每个消息的 ...

  3. 记录一个原因不明的段错误(libxml2 proc activemq的三角恋)

    又碰到了令人头疼的段错误,但是这次,虽然最终找到了出自何处,但是还是不明白究竟是为何. 最后将程序简化,贴上来,希望高人能指点一下. memt.pc: #include <libxml/pars ...

  4. Windows安装ActiveMQ记录

    1.下载压缩包(activeMQ应用要基于jdk服务上,安装本软件时,最好已经安装了jdk并且配置好了环境变量) 下载5.12.2版本:http://activemq.apache.org/activ ...

  5. 消息队列开发记录笔记-ActiveMQ

    1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...

  6. 简单记录下springboot+jms+activemq

    1. 安装ActiveMQ 到Apache官方网站下载最新的ActiveMQ的安装包,并解压到本地目录下后运行 2. pom.xml引入  springboot配置文件中填写相关配置 3.创建生产者 ...

  7. ActiveMQ开发与简介

    1.概述与介绍 ActiveMQ是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现.提供 ...

  8. ActiveMQ的初夜

    Producer Flow Control mq自己实现了Flow Control(流量控制,默认开启),在mq的版本中,4.x和5.x流量控制实现原理并不相同,前者通过 TCP Flow Contr ...

  9. ActiveMQ实现负载均衡+高可用部署方案

    一.架构和技术介绍 1.简介 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现 2.activemq的特 ...

随机推荐

  1. Oracle10GODP连接11G数据库,出现ORA - 1017用户名/口令无效; 登录被拒绝 的问题

    一.出现症状 1.使用sqlplus连接正常 2.C#使用10g的ODP.NET连接时,报上面的错误 二.原因 1.Oracle11G之前密码是不区分大小写的,从11G开始默认密码区分大小写 2.使用 ...

  2. poj 1947 树形dp

    思路:dp[i][j]表示,以i节点为根,删去j个节点最少要断几条边. 那么dp[u][j]=min(dp[u][j],dp[v][k]+dp[u][j-k]);//选取最优状态 dp[u][j]=m ...

  3. C#垃圾回收机制

    C#属于托管的面相对象的语言,内存回收机制就是一个代表, C#有一套类似"全自动"的垃圾回收机制,也就是虚拟机会自动来判断执行内存的回收, 我们一般常用的Dispose(),Usi ...

  4. ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.

    需要在库程序包管理器里依次执行以下命令: 1.启用迁移功能:Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDbContext 2.建立 ...

  5. 将ubuntu14.04设置为文本模式启动?

    修改改GRUB 的配置文件(不建议直接改 grub.conf) $sudo vim /etc/default/grub 找到: GRUB_CMDLINE_LINUX_DEFAULT="qui ...

  6. Java longTime 和C#日期转换(结构+运算符重载)

    前几天,因为工作原因,连到了公司的一个java系统.查看数据的时候,突然整个人都不好了,数据库中日期字段时间为毛都是整型?之前从来没有接触过java,所心就趁机了解了一下.原来,在数据库中,保存的是j ...

  7. python基础day2作业:购物车

    #功能:1.可注册账号2.登录买家账号3.可查询编辑购物车里商品4.可以余额充值5.可提示余额不足6.购物车结算 #使用:1.第一次使用先注册账号填写账号金额2.账号金额信息保存在buyer_acco ...

  8. Java中的哈希

    Java中的哈希 前言 在开发中经常用到HashMap.HashSet等与哈希有关的数据结构,一直只知道这些哈希的数据结构不保证顺序,不清楚具体什么情况.所以在这里大致总结一下.   Java的Has ...

  9. HyperMesh生成Flac3D的剖分网格

    本帖的目的是探索煤矿沉积岩层采煤过程中的力学分析模拟的前处理方法,计算软件采用公认的Flac3D差分方法. 目前,Flac3D官方提供的剖分网格的生成方法有三种.一是直接使用命令和Fish语句生成,这 ...

  10. iPhone的全球之旅 读书笔记

          最近在看<一只iPhone的全球之旅>,文章主要从iPhone供应链角度入手,从各个方面来详细剖析了iPhone这一智能手机领头羊的生产过程.       苹果iPhone手机 ...