前言

前面介绍了基本的消费者和生产者,那么看下他们之间有什么其他的api。

正文

消费者设置等待时间

生产者生产了5条消息

改一下消费者。

static void Main(string[] args)
{ Uri connecturl = new Uri("activemq:tcp://106.15.250.57:61616");
IConnectionFactory factory = new ConnectionFactory(connecturl); using (IConnection connection = factory.CreateConnection())
{
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, "queue://test");
using (IMessageConsumer consumer=session.CreateConsumer(destination))
{
connection.Start();
//consumer.Listener += new MessageListener(onMessage);
while (true)
{
var message = (ITextMessage)consumer.Receive(TimeSpan.FromSeconds(4));
if (message != null)
{
Console.WriteLine(message.NMSMessageId);
Console.WriteLine(message.Text);
}
}
}
}
}
}

Receive(TimeSpan.FromSeconds(4)) 表示如果4秒没有消息将不再等待。通过断点调式可以很快的展示出来。

多个消费者的情况

我们知道队列是每个生产的东西都只能消费一次,这个就不做试验了,因为这个是队列的基本原理。

那么我启动两个消费者,那么消费情况是什么样的呢?

生产者:

class Program
{
static void Main(string[] args)
{
Uri connecturl = new Uri("activemq:tcp://106.15.250.57:61616");
IConnectionFactory factory = new ConnectionFactory(connecturl);
using (IConnection connection = factory.CreateConnection())
{
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, "queue://test");
using (IMessageProducer producer = session.CreateProducer(destination))
{
//producer.DeliveryMode = MsgDeliveryMode.Persistent;
//producer.RequestTimeout = TimeSpan.FromSeconds(2);
for (int i = 1; i < 7; i++)
{
ITextMessage request = session.CreateTextMessage("oh,my friend"+i);
producer.Send(request);
}
}
}
}
}
}

两个消费者:

class Program
{
protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
static void Main(string[] args)
{ Uri connecturl = new Uri("activemq:tcp://106.15.250.57:61616");
IConnectionFactory factory = new ConnectionFactory(connecturl); using (IConnection connection = factory.CreateConnection())
{
using (ISession session = connection.CreateSession())
{
IDestination destination = SessionUtil.GetDestination(session, "queue://test");
using (IMessageConsumer consumer = session.CreateConsumer(destination))
{
connection.Start();
consumer.Listener += new MessageListener(onMessage);
Console.Read();
//while (true)
//{
// var message = (ITextMessage)consumer.Receive(TimeSpan.FromSeconds(4));
// if (message != null)
// {
// Console.WriteLine(message.NMSMessageId);
// Console.WriteLine(message.Text);
// }
//}
}
}
}
} protected static void onMessage(IMessage receivedMsg)
{
ITextMessage message = receivedMsg as ITextMessage;
if (message != null)
{
//查询出消息
Console.WriteLine(message.Text);
}
}
}

消费情况:



平均分配

ActiveMQ c# 系列——进阶实例(三)的更多相关文章

  1. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  2. ActiveMQ入门系列二:入门代码实例(点对点模式)

    在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...

  3. 《Genesis-3D开源游戏引擎-官方录制系列视频教程:进阶实例篇》

    注:本系列教程仅针对引擎编辑器:v1.2.2及以下版本 G3D进阶实例   第四课<2D编辑与脚本的统一入口> 使用G3D完成一个简单的类飞机大战游戏,介绍了G3D2d游戏制作的流程包括: ...

  4. Java进阶(三)多线程开发关键技术

    原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...

  5. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  6. SQL Server调优系列进阶篇(深入剖析统计信息)

    前言 经过前几篇的分析,其实大体已经初窥到SQL Server统计信息的重要性了,所以本篇就要祭出这个神器了. 该篇内容会很长,坐好板凳,瓜子零食之类... 不废话,进正题 技术准备 数据库版本为SQ ...

  7. SQL Server调优系列进阶篇(如何索引调优)

    前言 上一篇我们分析了数据库中的统计信息的作用,我们已经了解了数据库如何通过统计信息来掌控数据库中各个表的内容分布.不清楚的童鞋可以点击参考. 作为调优系列的文章,数据库的索引肯定是不能少的了,所以本 ...

  8. JMS【四】--Spring和ActiveMQ整合的完整实例

    第一篇博文JMS[一]--JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文JMS[二 ...

  9. TiKV 源码解析系列文章(三)Prometheus(上)

    本文为 TiKV 源码解析系列的第三篇,继续为大家介绍 TiKV 依赖的周边库 rust-prometheus,本篇主要介绍基础知识以及最基本的几个指标的内部工作机制,下篇会介绍一些高级功能的实现原理 ...

  10. Java NIO系列教程(三) Channel之Socket通道

    目录: <Java NIO系列教程(二) Channel> <Java NIO系列教程(三) Channel之Socket通道> 在<Java NIO系列教程(二) Ch ...

随机推荐

  1. 发布DDD脚手架到Maven仓库,IntelliJ IDEA 配置一下即可使用

    作者:小傅哥 博客:https://bugstack.cn 项目:https://gaga.plus 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主,小傅哥. 这篇文章将帮助粉丝 ...

  2. redis同步锁的真实应用场景

    一.问题由来 现在正在做的小程序后台中,有一个功能叫做高光时刻,在操作高光时刻的时候,可能会有多个用户来同时想操作这个功能,可是在同一时间只能 有一个用户能够操作.刚开始做的时候,自己的做法是在red ...

  3. vscode 快捷键更换 ctrl + h 全局搜索 改为 f1 - 个人习惯 - 针对某些跨文件函数不能自动跳转

    vscode 快捷键更换 ctrl + h 全局搜索 改为 f1 - 个人习惯 - 针对某些跨文件函数不能自动跳转 原来 f1 换成 ctrl + f1 它一般用 ctrl + shift + p 调 ...

  4. AWS ES ISM学习应用笔记

    Elastic Search 6以上版本推出 ILM,用于管理Index的生命周期,但AWS上的ES是基于OSS版本的ES,所以自己开发了ISM来代替ILM.项目是从logstash往ES写入数据,但 ...

  5. Java基础知识篇01——Java基本介绍

    一.什么是 Java Java 是 Sun Microsystems 于 1995 年首次发布的一种编程语言和计算平台.编程语言还是比较好理解的,什么是计算平台呢? 计算平台是电脑中运行应用程序(软件 ...

  6. golang sync.Map之如何设计一个并发安全的读写结构?

    在 golang中,想要并发安全的操作map,可以使用sync.Map结构,sync.Map 是一个适合读多写少的数据结构,今天我们来看看它的设计思想,来看看为什么说它适合读多写少的场景. 如下,是g ...

  7. Three.js实现可透视的水面效果

    1. 引言 Three.js是著名的JavaScript 3D图形库,用于浏览器中开发 3D 交互场景的 JS 引擎,可以快速的搭建三维场景 Three.js官网为:创建一个场景 – three.js ...

  8. 记录--九个超级好用的 Javascript 技巧

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在实际的开发工作过程中,积累了一些常见又超级好用的 Javascript 技巧和代码片段,包括整理的其他大神的 JS 使用技巧,今天 ...

  9. Java Agent技术

    在定位公司问题的时候,需要了解一下skywalking的相关知识,而agent就提上了日程. 官网文档 Agent技术是Jdk在1.5版本之后,所提供的一个在jvm启动前后对部分java类代理加强的机 ...

  10. 鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)

    一.GridRow/GridCol 1.概述 栅格布局是一种通用的辅助定位工具,可以帮助开发人员解决多尺寸多设备的动态布局问题.通过将页面划分为等宽的列数和行数,栅格布局提供了可循的规律性结构,方便开 ...