环境准备

1.安装jdk1.7+

2.下载新版ActiveMQ

http://activemq.apache.org/

3.启动activemq服务

4.启动成功后的界面是

 5.启动成功后

浏览器访问http://localhost:8161/admin,默认用户名和密码admin/admin,管理员界面如下:

6.如果你想修改用户名和密码的话

在conf/jetty-realm.properties中修改即可,重启服务才能生效。

7.如果需要修改端口可以在jetty文件中修改,重启服务才能生效。

发送消息的基本步骤

(1)、创建连接使用的工厂类JMS ConnectionFactory

(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动

(3)、使用连接Connection 建立会话Session

(4)、使用会话Session和管理对象Destination创建消息生产者MessageSender

(5)、使用消息生产者MessageSender发送消息

消息接收者从JMS接受消息的步骤

(1)、创建连接使用的工厂类JMS ConnectionFactory

(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动

(3)、使用连接Connection 建立会话Session

(4)、使用会话Session和管理对象Destination创建消息接收者MessageReceiver

(5)、使用消息接收者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver消息接收者必须实现了MessageListener接口,需要定义onMessage事件方法。

C#实战代码

1.ActiveMQ官方网站下载最新版的C#驱动

Apache.NMS:http://activemq.apache.org/nms/nms-api-downloads.html

Apache.NMS.ActiveMQ:http://activemq.apache.org/nms/activemq-downloads.html

2.引用以下两个dll

Apache.NMS.ActiveMQ.dll
Apache.NMS.dll

config中添加配置

 <add key="ActiveMQUrl" value="tcp://127.0.0.1:61616" />

在ActiveMQ的conf目录的activemq.xml中的节点<broker></broker>里面添加账号密码,重启服务才能生效

<!-- 添加访问ActiveMQ的账号密码 -->
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="manager" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>

生产者代码

public void ActiveMQProducer()
{
string ActiveMQUrl = System.Configuration.ConfigurationManager.AppSettings["ActiveMQUrl"];
IConnectionFactory factory = new ConnectionFactory(ActiveMQUrl);
//通过工厂建立连接
using (IConnection connection = factory.CreateConnection("admin", "manager"))
{
//通过连接创建Session会话
using (ISession session = connection.CreateSession())
{
//通过会话创建生产者,方法里面new出来的是MQ中的Queue
ActiveMQQueue quene = new ActiveMQQueue("audioQueue");//点到点模式 队列模式
//ActiveMQTopic quene = new ActiveMQTopic("testTopic");//广播形式 发布订阅模式 发送的消息如果没有消费者接收就会没了 IMessageProducer prod = session.CreateProducer(quene);
//创建一个发送的消息对象
ITextMessage message = prod.CreateTextMessage();
//给这个对象赋实际的消息 //任务实体模型
ActiveMQInfo activeMQInfo = new ActiveMQInfo();
activeMQInfo.TaskID = Guid.NewGuid().ToString();
activeMQInfo.TaskName = "订单处理";
activeMQInfo.FileName = Guid.NewGuid().ToString();
activeMQInfo.TaskDateTime = DateTime.Now; message.Text = JsonConvert.SerializeObject(activeMQInfo);
//设置消息对象的属性,这个很重要哦,是Queue的过滤条件,也是P2P消息的唯一指定属性
message.Properties.SetString("filter", "getduration");
//生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链,MsgPriority消息优先级别,发送最小单位,当然还有其他重载
prod.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);
}
}
}

消费者代码

        public void ActiveMQConsumer()
{
try
{
string ActiveMQUrl = System.Configuration.ConfigurationManager.AppSettings["ActiveMQUrl"];
//创建连接工厂
IConnectionFactory factory = new ConnectionFactory(ActiveMQUrl);
//通过工厂构建连接
IConnection connection = factory.CreateConnection("admin", "manager");
//这个是连接的客户端名称标识
connection.ClientId = "GuardQueueListener";
//启动连接,监听的话要主动启动连接
connection.Start();
//logger.Error("消息队列启动");
//通过连接创建一个会话
ISession session = connection.CreateSession();
//通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
ActiveMQQueue quene = new ActiveMQQueue("audioQueue");//队列模式
//ActiveMQTopic quene = new ActiveMQTopic("testTopic");//发布订阅模式 发送的消息如果没有消费者接收就会没了
IMessageConsumer consumerAudio = session.CreateConsumer(quene,"filter='getduration'");
//注册监听事件
consumerAudio.Listener += new MessageListener(consumerMediaAudio_Listener);
}
catch (Exception ex)
{
//记录异常信息
}
} private void consumerMediaAudio_Listener(IMessage message)
{
ITextMessage iTextMessage = (ITextMessage)message;
string msg = iTextMessage.Text;
//逻辑处理代码
//ActiveMQInfo activeMQInfo = JsonConvert.DeserializeObject<ActiveMQInfo>(msg); }
ActiveMQInfo实体类
public class ActiveMQInfo
{
public string TaskID { get; set; }
public string TaskName { get; set; }
public string FileName { get; set; }
public DateTime TaskDateTime { get; set; }
}

两种模式

ActiveMQ持久化消息

1.持久化为文件

涉及到的配置activemq.xml

<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

C#代码

prod.Send(message, MsgDeliveryMode.Persistent, MsgPriority.Normal, TimeSpan.MinValue);

2.持久化为MySql

你首先需要把MySql的驱动放到ActiveMQ的Lib目录下,总共用到3个jar包:

mysql-connector-java-5.1.6.jar:https://dev.mysql.com/downloads/connector/j/

commons-dbcp-1.4.jar:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

commons-pool-1.6.jar:http://commons.apache.org/proper/commons-pool/download_pool.cgi

接下来修改配置文件activemq.xml里面的broker节点里面的persistenceAdapter节点,为了防止每次重启服务都去创建新表,只在第一次配置的时

createTablesOnStartup="true",数据库创建表后我们将createTablesOnStartup="false"。

<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="false"/>
</persistenceAdapter>

在配置文件中的broker节点外增加

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>

从配置中可以看出数据库的名称是activemq,你需要手动在MySql中增加这个库。然后重新启动消息队列,你会发现多了3张表:

3.其他持久化以后再写吧

 

Windows Server环境下消息队列之ActiveMQ实战的更多相关文章

  1. Centos7环境下消息队列之ActiveMQ实战

    Activemq介绍 对于消息的传递有两种类型: 一种是点对点的,即一个生产者和一个消费者一一对应: 另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收. JMS定义了 ...

  2. Windows server 2012 开启消息队列功能

  3. 一、消息队列之ActiveMQ的安装、配置和C#样例代码

    最近有时间了,研究一下消息队列ActvieMQ,结合自己的实践和网上的一些大家内容,整理如下,所有步骤和链接均是正确的. 1.ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲 ...

  4. 工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析

    1.[连载]<C#通讯(串口和网络)框架的设计与实现> 2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 2.应用SuperIO(SIO)和开源跨平台物联网框 ...

  5. Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误

    今天开发那边升级.改造系统过程中,在测试服务器碰到关于ASP程序连接ORACLE数据库的小问题,虽然是小问题,但是整起来真要命啊,花了不少时间,主要是ASP程序啊,这种上古神器,哥还是当年毕业的时候弄 ...

  6. WP8_(windows phone环境下)上传文件从C#到php接口

    在windows phone环境下,将手机上的图片上传到服务端(php环境): 注意事项:在上传的地方,头文件中name,例如name= img,则在php服务端处理时 ,需要约定好 存取一致 php ...

  7. [转]Win7、Windows Server 2008下无法在Windows Service中打开一个已经存在的Excel 2007文件问题的解决方案

    昨天,组里一个小朋友告诉我,他写的报表生成服务中无法打开一个已经存在的Excel 2007文件,他的开发环境是Win7.Visual Studio .Net 2008(Windows Server 2 ...

  8. Windows Server 2003 下如何安装及配置 FTP 服务器(转)

    Windows Server 2003 下如何安装及配置 FTP 服务器 一.安装 FTP 服务器组件: 写在这里的一点 : 安装及配置 FTP 服务器之前 , 必须先手工配置服务器本身的 IP 地址 ...

  9. windows Apache 环境下配置支持HTTPS的SSL证书

    windows Apache 环境下配置支持HTTPS的SSL证书 1.准备工作 1)在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有SSL版本的A ...

随机推荐

  1. visual stdio2013软件安装及单元测试

    visual stdio2013软件安装及单元测试 一.visual stdio2013软件安装详解 今天,笔者为大家带来如何在Windows10下完美安装Visual Studio 2013专业版. ...

  2. 微信小程序之Flex布局

    微信小程序页面布局方式采用的是Flex布局.Flex布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局.Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们 ...

  3. vue 里面的watch 选项详解

    早就想好好写写这个watch了,一直顾不上,因为想深刻的记录一下,其实这些东西只要是好好看看官网的说明,都在里面呢. 虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器.这就是为什么 V ...

  4. docker删除为<none>的镜像

    $ docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }')  //停止容器      $ docker rm ...

  5. getResource()的使用总结 ;

    1.通过ClassLoader来加载getResource()时不需要加 "/" 因为source是从main开始的; Thread.currentThread().getCont ...

  6. SEO优化之HTML代码优化最重要的5个标签

    众所周知,HTML代码一直是搜索引擎抓取的重点.搜索引擎会将HTML中的某些元素标签作为影响网页排名的重要依据 在我们之前的文章中也或多或少地向大家介绍了有关HTML代码的优化技巧,接下来将系统地讲解 ...

  7. zoj 2588 Burning Bridges(割边/桥)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1588 题意:Ferry王国有n个岛,m座桥,每个岛都可以互达,现在要 ...

  8. HDU4745——Two Rabbits——2013 ACM/ICPC Asia Regional Hangzhou Online

    这个题目虽然在比赛的时候苦思无果,但是赛后再做就真的是个水题,赤果果的水题. 题目的意思是给n个数构成的环,两只兔子从任一点开始分别顺逆时针跳,每次可以调到任意一个数(最多不会跳过一圈). 求最多能跳 ...

  9. P1198 [JSOI2008]最大数

    题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度.(L>0) ...

  10. Linux gcc和gdb程序调试用法 {转}

    gcc一般调试格式: gcc -Wall -o  test   test.c // -wall  显示程序错误详细信息      gcc -v  // 显示gcc的版本 gcc -o{1,2,3} t ...