zoukankan      html  css  js  c++  java
  • Linux下安装ActiveMQ CPP

    ActiveMQ CPP

    ActiveMQ CPP是用C++语言访问ActiveMQ的客户端开发库,也称cms(cpp message service),安装cms开发库需要先安装一些基础库。

    如下:

     (1)autoconf,automake,libtool

    curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
    tar -xzf autoconf-2.69.tar.gz 
    cd autoconf-2.69
    ./configure --prefix=/usr/local/autoconf/&& make && sudo make install
     
    curl -OL http://ftpmirror.gnu.org/automake/automake-1.14.tar.gz
    tar -xzf automake-1.14.tar.gz
    cd automake-1.14
    ./configure --prefix=/usr/local/automake/&& make && sudo make install
     
    curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
    tar -xzf libtool-2.4.2.tar.gz
    cd libtool-2.4.2
    ./configure --prefix=/usr/local/libtool/&& make && sudo make install

    (2)cppunit

    打开http://activemq.apache.org/cms/building.html页面,这里介绍了cms build时用到的依赖库。 
    执行下面命令完成cppunit下载: 
    curl -OL https://sourceforge.net/projects/cppunit/files/cppunit/1.12.1/ 
    这里选择1.12.1版本,获取到下载地址后,在linux下可以用wget命令直接下载,或者下载完成后传到linux系统中。

    tar解压后,进入目录,编译三部曲,configure、make、make install(install需要root权限): 

    ./configure --prefix=/usr/local/cppunit/ 
    make 
    make install 


    执行完后在/usr/local/cppunit/目录下可以看到头文件和库文件。

    注:我是Ubuntu下安装的,按上述步骤安装到make的时候遇到了两个问题,解决方法如下:

    1.当进行make的时候, 则出现了如下的错误:

    从上面的提示可以看出, 问题是出在DllPlugInTester编译的过程中, 出现这个问题的可能原因是g++的版本为4.8.1.

    解决办法

    cd到DllPlugInTester目录下,

    LDFLAGS=后面加上, LDFLAGS=-Wl,--no-as-need, 然后再次make, 如果在其他的目录又出现类似的问题, 用同样的方法进行处理即可.

    2.make又出现了以下错误:

    解决方法:./configure LDFLAGS='-ldl'  

          make

    (3)apr

    apr的全称为Apache Portable Runtime(Apache可移植运行时),Apache旗下有很多开源软件。

    apr介绍页面: 
    http://apr.apache.org/download.cgi 
    执行下面命令完成apr下载: 

    curl -OL  http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz

    同上,解压进入目录,三部曲:

    ./configure --prefix=/usr/local/apr/ 
    make 
    make install
    

     

    (4)apr-util

    执行下面命令完成APR-util的下载: 
     curl -OL http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz

    解压编译: 

    ./configure --prefix=/usr/local/aprutil --with-apr=/usr/local/apr/ 
    make 
    make install

    (5)apr-iconv

    执行下面的命令完成APR iconv 的下载: 
      curl -OL   http://mirrors.hust.edu.cn/apache//apr/apr-iconv-1.2.1.tar.gz

    解压编译: 

    ./configure --prefix=/usr/local/apr-iconv/ --with-apr=/usr/local/apr/ 
    make 
    make install
    

    (6)openssl

    执行下面的命令完成openssl 的下载: 
     curl -OL  http://www.openssl.org/source/openssl-1.0.0a.tar.gz

    解压编译: 
    ./config --prefix=/usr/local/openssl/ 
    make 
    make install 

     若出现报错 
    cms.pod around line 457: Expected text after =item, not a number 
    在root权限下,执行rm -f /usr/bin/pod2man 然后重新make install

    (7)ActiveMQ-CPP

    这里选择最新的ActiveMQ-CPP 3.9.4版本,下载页面为: 
    http://activemq.apache.org/cms/2017/02/24/activemq-cpp-v394-released.html

    解压编译: 

    ./configure --prefix=/usr/local/ActiveMQ-CPP --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/aprutil --with-cppunit=/usr/local/cppunit --with-openssl=/usr/local/openssl 
    make 
    make install 
    

      

    测试程序

    至此编译工作完成,在/usr/local目录下生成了6个目录,分别为ActiveMQ-CPP、apr、apr-iconv、aprutil、cppunit、openssl。

    下面编写一段测试代码(test.cpp),用于检测cms开发库是否可用。

    #include <activemq/library/ActiveMQCPP.h>
    #include <decaf/lang/Thread.h>
    #include <decaf/lang/Runnable.h>
    #include <decaf/util/concurrent/CountDownLatch.h>
    #include <decaf/lang/Integer.h>
    #include <decaf/lang/Long.h>
    #include <decaf/lang/System.h>
    #include <activemq/core/ActiveMQConnectionFactory.h>
    #include <activemq/util/Config.h>
    #include <cms/Connection.h>
    #include <cms/Session.h>
    #include <cms/TextMessage.h>
    #include <cms/BytesMessage.h>
    #include <cms/MapMessage.h>
    #include <cms/ExceptionListener.h>
    #include <cms/MessageListener.h>
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <memory>
    
    using namespace activemq::core;
    using namespace decaf::util::concurrent;
    using namespace decaf::util;
    using namespace decaf::lang;
    using namespace cms;
    using namespace std;
    
    int main()
    {
            activemq::library::ActiveMQCPP::initializeLibrary();
            Connection* conn;
            Session* sess;
            Destination* dest;
            MessageProducer* producer;
    
            std::string brokerurl("failover:(tcp://192.168.1.113:61616)");
            try
            {
                    auto_ptr<ConnectionFactory> connFactory(ConnectionFactory::createCMSConnectionFactory(brokerurl));
                    conn = connFactory->createConnection();
                    conn->start();
    
                    sess = conn->createSession(Session::AUTO_ACKNOWLEDGE);
                    dest = sess->createQueue("QueueFromLinuxTest");
    
                    producer = sess->createProducer(dest);
                    producer->setDeliveryMode(DeliveryMode::NON_PERSISTENT);
    
                    string text("Hello ActiveMQ from LinuxTest");
                    for (int i = 0; i < 3; ++i)
                    {
                            TextMessage* msg = sess->createTextMessage(text);
                            msg->setIntProperty("IntProp1", i);
                            producer->send(msg);
                            cout << "SEND-> " << text << endl;
                            delete msg;
                    }
            }
            catch (CMSException& e)
            {
                    e.printStackTrace();
            }
    
            try {
                    delete dest;
                    dest = NULL;
                    delete producer;
                    producer = NULL;
    
                    if (NULL != sess)
                            sess->close();
                    if (NULL != conn)
                            conn->close();
    
                    delete sess;
                    sess = NULL;
                    delete conn;
                    conn = NULL;
            }
            catch (CMSException& e)
            {
                    e.printStackTrace();
            }
    
            cout << "test end" << endl;
            activemq::library::ActiveMQCPP::shutdownLibrary();
    }
    

      

    编译命令: 
    g++ test.cpp -I/usr/local/ActiveMQ-CPP/include/activemq-cpp-3.9.4 -I/usr/local/apr/include/apr-1 -L/usr/local/ActiveMQ-CPP/lib -lactivemq-cpp 

    其中-I指定了两个include目录,-L指定了一个库目录,-l指定了一个链接库。

    运行时,需要将libactivemq-cpp.so、libactivemq-cpp.so.19、libactivemq-cpp.so.19.0.3这3个运行时库复制到/usr/lib64目录下。

    参考:http://blog.csdn.net/lgh1700/article/details/51055784

  • 相关阅读:
    Java并发编程原理与实战二十九:Exchanger
    Java并发编程原理与实战二十八:信号量Semaphore
    Java并发编程原理与实战二十七:循环栅栏:CyclicBarrier
    Java并发编程原理与实战二十六:闭锁 CountDownLatch
    Java并发编程原理与实战二十五:ThreadLocal线程局部变量的使用和原理
    Java并发编程原理与实战二十四:简易数据库连接池
    Java并发编程原理与实战二十三:Condition原理分析
    Java并发编程原理与实战二十二:Condition的使用
    Java并发编程原理与实战二十一:线程通信wait&notify&join
    Java并发编程原理与实战二十:线程安全性问题简单总结
  • 原文地址:https://www.cnblogs.com/alinh/p/6729124.html
Copyright © 2011-2022 走看看