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

  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/alinh/p/6729124.html
Copyright © 2011-2022 走看看