解析ActiveMQ的使用说明总结_C 语言

本文只针对ActiveMQ常见的一些问题进行介绍。关于如下下载、编译、部署、使用等基本应用不在本文范围内。

 

1、ActiveMQ支持消息过滤设置规则和用法

selector支持下列几种方式:

(1) String literals: "color ='blue'"

(2) Byte strings: “myBytes <> "0X0AFC23"”

(3) Numeric values: "NoltemsInStock > 20"

(4) Boolean literals TRUE or FALSE: "AcctDetails=TRUE"

(5) Composite expressions: "Type='car' AND (color = 'blue' OR color ='green') AND weight> 2500"

 

使用方式:

(1)创建生产者在send函数之前添加过滤属性:

  message->setStringProperty("Color",pColor);

  producer->send(message);

(2)在创建消费者createConsumer时进行如下设置:

  std::string MessageFilter="color ='blue'"

  m_pConsumer = m_pSession->createConsumer(m_pDestination, m_MessageFilter);

  m_pConsumer->setMessageListener(this);

 

 

2、错误:Channel was inactive for too long (服务器消息较长时间没有消息发送时,客户端会报这个错误)

解决方法:在建立连接的Uri中加入: wireFormat.maxInactivityDuration=0

 

3、采用failover方式连接导致卡死

解决方法:不采用failover连接

 

4、ActiveMQ发送模式

(1)ActiveMQ异步发送,只需新增参数transport.useAsyncSend=true,具体如下:

      BrokerUri = "tcp://127.0.0.1:61616?transport.useAsyncSend=true"

(2)ActiveMQ同步发送,只需新增参数transport.useAsyncSend=false,具体如下:

      BrokerUri = "tcp://127.0.0.1:61616?transport.useAsyncSend=false"

      其实activeMQ在默认情况下就是同步发送,所以在同步发送时可以简写为:

     BrokerUri = "tcp://127.0.0.1:61616"

 

 

5、错误:The Session is closed(网络异常时客户端会报出这个错误)

解决办法:在建立连接的Uri中加入: maxReconnectDelay=10000

maxReconnectDelay 最大重连间隔

 

 

6、ActiveMQ负责均衡

对broker采取了负载均衡和基于共享文件系统的主备配置,这个时候,客户端生产者和消费者的URI中用

failover:(tcp://192.168.1.117:61616,tcp://192.168.1.118:61616,tcp://broker3:61616)

 

 

6、ActiveMQ的ACK设置

根据不同的需要可以将ACK设置为Session::CLIENT_ACKNOWLEDGE 或 Session::AUTO_ACKNOWLEDGE 默认为Session::AUTO_ACKNOWLEDGE 如:

if( clientAck )

{

session = connection->createSession( Session::CLIENT_ACKNOWLEDGE);

}

else

{

session = connection->createSession( Session::AUTO_ACKNOWLEDGE);

}

 

7、ActiveMQ的Topic设置

根据不同的需要可以将Topic设置为Topic或 Queue默认为Queue如:

if(useTopic)

{

   destination = session->createTopic(destURI);

}

else

{

   destination = session->createQueue(destURI);

}

 

8、ActiveMQ的DeliveryMode设置(生产者时设置)

根据不同的需要可以将DeliveryMode设置为DeliveryMode::NON_PERSISTENT或 DeliveryMode::PERSISTENT默认为DeliveryMode::NON_PERSISTENT如:

if(usePersistent)

{

  producer->setDeliveryMode( DeliveryMode::PERSISTENT);

}

else

{

  producer->setDeliveryMode( DeliveryMode::NON_PERSISTENT);

}

 

时间: 2024-09-25 17:34:47

解析ActiveMQ的使用说明总结_C 语言的相关文章

全面解析C++中的析构函数_C 语言

"析构函数"是构造函数的反向函数.在销毁(释放)对象时将调用它们.通过在类名前面放置一个波形符 (~) 将函数指定为类的析构函数.例如,声明 String 类的析构函数:~String(). 在 /clr 编译中,析构函数在释放托管和非托管资源方面发挥了特殊作用. 析构函数通常用于在不再需要某个对象时"清理"此对象.请考虑 String 类的以下声明: // spec1_destructors.cpp #include <string.h> class

深入解析C++中类的多重继承_C 语言

C++类的多继承 在前面的例子中,派生类都只有一个基类,称为单继承.除此之外,C++也支持多继承,即一个派生类可以有两个或多个基类. 多继承容易让代码逻辑复杂.思路混乱,一直备受争议,中小型项目中较少使用,后来的 Java.C#.PHP 等干脆取消了多继承.想快速学习C++的读者可以不必细读. 多继承的语法也很简单,将多个基类用逗号隔开即可.例如已声明了类A.类B和类C,那么可以这样来声明派生类D: class D: public A, private B, protected C{ //类D新

C语言基础知识点解析(extern,static,typedef,const)_C 语言

一.extern的使用方法 下面是<C语言程序设计>中的关于extern的解释: 在一个源程序的所有源文件中,一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern声明来访问它(定义外部变量的源文件中也可以包含对该外部变量的extern声明).外部变量的定义中必须指定数组的长度,但extern声明不一定指定数组的长度. 外部变量的初始化只能出现在其定义中. 假设函数push与pop定义在一个文件中,而变量val与sp在另一个文件中定义本那个被初始化(通常不太可能这样组织程序),则

节序问题:解析大小的端判定_C 语言

大小端的判断很简单,可判断了有什么用呢?这是一个难缠的问题,我最近就碰到了这样一个问题,比如,int a = 0x12345678,char* p = &a,那么p[0]等于多少呢?答案要么是0x12,要么是0x78,对吧,如果你知道他是小端(因为地球人都知道),那么你肯定就知道p[0] = 0x78,呵呵,换句话说,理解大小端对指针的运用还是有一定帮助的. 一.大小端概念要判断电脑的大小端,肯定先要理解大小端的概念:大端模式(Big-Endian),是指数据的高位,保存在内存的低地址中,而数据

深入解析C++中的引用类型_C 语言

c++比起c来除了多了类类型外还多出一种类型:引用.这个东西变量不象变量,指针不象指针,我以前对它不太懂,看程序时碰到引用都稀里糊涂蒙过去.最近把引用好好地揣摩了一番,小有收获,特公之于社区,让初学者们共享. 引用指的是对一个对象的引用.那么什么是对象?在c++中狭义的对象指的是用类,结构,联合等复杂数据类型来声明的变量,如 MyClass myclass,CDialog  mydlg,等等.广义的对象还包括用int,char,float等简单类型声明的变量,如int a,char b等等.我在

深入解析最长公共子串_C 语言

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串.例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串. 分析:求最长公共子串(Longest Common Subsequence, LCS)是一道非常经典的动态规划题,

标准CSV格式的介绍和分析以及解析算法实例详解_C 语言

     CSV是一种古老的数据传输格式,它的全称是Comma-Separated Values(逗号分隔值).出生在那个标准缺失的蛮荒年代,CSV的标准一直(到2005年)是NULL--世间存在着N种CSV格式,它们自成体系,相互不兼容.比如我们从名字可以认为CSV至少是一种使用逗号分隔的格式,但是实际上,有的CSV格式却是使用分号(;)去做分隔.假如,不存在一种标准,那么这东西最终会因为碎片化而发展缓慢,甚至没落.本文讨论的CSV格式是基于2005年发布的RFC4180规范.我想,在这个规范

解析四方定理的应用_C 语言

我们可以通过计算机验证其在有限范围的正确性. 复制代码 代码如下: #include <stdio.h>#include <math.h> int f(int n, int a[], int idx){ if(n==0) return 1;   if(idx==4)  return 0;  //超出数组范围 出错  for(int i=(int)sqrt(n); i>=1; i--) {  a[idx] = i;   if(f(n-i*i, a, idx+1) == 1) 

深入解析C++程序中激发事件和COM中的事件处理_C 语言

本机 C++ 中的事件处理在处理本机 C ++ 事件时,您分别使用 event_source 和 event_receiver 特性设置事件源和事件接收器,并指定 type=native.这些特性允许应用它们的类在本机的非 COM 上下文中激发和处理事件. 声明事件 在事件源类中,对一个方法声明使用 __event关键字可将该方法声明为事件.请确保声明该方法,但不要定义它:这样做会产生编译器错误,因为将该方法转换为事件时编译器会隐式定义它.本机事件可以是带有零个或多个参数的方法.返回类型可以是