ActiceMQ-CPP消息插件是CMS的一种实现,是一个能够与ActiveMQ进行通信的C++客户端库,ActiveMQ-CPP的架构设计能够支持可插拨的传输协议和消息封装格式,并且支持客户端容量,能够与ActiveMQ高效和便捷地进行通信,并且提供一系列跨平台的类Java API的特性,如多线程处理、I/O、sockets等

在进行activemq插件开发之前我们需要有以下几个操作:

<1>activemq-cpp的安装

activemq-cpp的编译依赖libuuid,apr,apr-util,apr-iconv,openssl几个库,目前库资源比较难找,附上自己使用的资源一份。下载地址:https://pan.baidu.com/s/1AdXdKsr1NwJRzkyD2gXjhg

1.1 安装apr

解压 tar -xf apr-1.4.6tar.gz

配置apr源码,并指定路径 ./configure --prefix=/usr/local/apr

安装 sudo make & make install

1.2安装apr-iconv

解压 tar -xf apr-iconv-1.2.1.tar

配置源码,并指定路径 ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr

安装 sudo make & make install

1.3安装apr-util

解压 tar -xf apr-util-1.4.1.tar.gz

配置源码,并指定路径 ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

安装 sudo make & make install

1.4 安装activemq-cpp

解压 tar -xf activemq-cpp.tar.gz

配置源码,并指定路径  ./configure --prefix=/usr/local/activemq-cpp --with-apr=/usr/local/apr/ --with-openssl=/usr/local/openssl

安装 sudo make & make install

安装完成,不想编译源码的可以下载我整理好的动态库https://pan.baidu.com/s/1AymD_IlazGUPppjsXqwtsA

然后在

/etc/ld.so.conf中加入/usr/local/lib這一行
执行 /sbin/ldconfig -v     调用这些动态库就可以了
 
<2>eos中添加activemq插件
首先每个plugin都只初始化一次,其次因为都在app中注册过,大家互相是可以调用的
2.1添加所需头文件
除了需要向eos中做一些注册和订阅通知意以外
activemq的创建,存取数据都可参照activemq-cpp中example实例
#include <decaf/lang/Thread.h>
#include <decaf/lang/Runnable.h>
#include <decaf/util/concurrent/CountDownLatch.h>
#include <decaf/lang/Long.h>
#include <decaf/util/Date.h>
#include <activemq/core/ActiveMQConnectionFactory.h>
#include <activemq/util/Config.h>
#include <activemq/library/ActiveMQCPP.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 <decaf/lang/System.h>
#include <decaf/lang/Integer.h>
#include <cms/Destination.h>
#include <cms/MessageProducer.h> using namespace activemq;    //使用
using namespace activemq::core;
using namespace decaf;
using namespace decaf::lang;
using namespace decaf::util;
using namespace decaf::util::concurrent;
using namespace cms;
using namespace std; class activemq_plugin : public plugin<activemq_plugin> {
public:
APPBASE_PLUGIN_REQUIRES((activemq_plugin)) //在application单例中注册当前插件类
activemq_plugin();
virtual ~activemq_plugin(); void plugin_initialize(const variables_map& options);   //初始化连接mq设置 void sendTxtMsg(const string& textMsg);        //发送消息 }

  

2.2线程共享数据加密

eos中大量采用boost中的算法,线程数据加锁采用pthread_mutex_t ,所有异步或同步线程中对内存数据同时存在读写的都得使用锁

pthread_mutex_t       m_mutex;      //锁定义

pthread_mutex_init(&m_mutex, NULL);    //初始化锁

pthread_mutex_lock(&m_mutex);        //加锁
pthread_mutex_unlock(&m_mutex);    //解锁

boost::thread m_thread(threadfunc);        //初始化线程

2.3eos每个plugin之间得互相访问

app().get_plugin<pluginA>()获取pluginA实例进行访问

<3>编译当前plugin

编写CMakeLists,make运行就完成了

file(GLOB HEADERS "include/eosio/activemq_plugin/*.hpp")
add_library( activemq_plugin
activemq_plugin.cpp
IniParser.cpp
${HEADERS} ) include_directories(
./
/usr/local/include/activemq-cpp-3.10.0/
/diskwork/work/activemq-cpp/activemq-cpp/src/main/
/usr/local/apr/include/apr-1/
/home/anlg/opt/boost/include/
./include/eosio/activemq_plugin/
${CMAKE_CURRENT_SOURCE_DIR}/../chain_plugin/include
)
link_directories(
./
/usr/local/lib/
)
target_link_libraries( activemq_plugin chain_plugin activemq-cpp appbase)
target_include_directories( activemq_plugin PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/../chain_interface/include"
"${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/appbase/include" )

  

activemq插件在eos中的开发的更多相关文章

  1. 在ASP.NET MVC应用中开发插件框架(中英对照)

    [原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I’v ...

  2. Eclipse中一个开发AspectJ的插件安…

    eclipse4.2 EE版本插件安装 Eclipse最新版本Juno版本发布.部分插件版本跟不上. 选择自己需要的插件安装. eclipse http://www.eclipse.org/downl ...

  3. 在 Traefik Proxy 2.5 中使用/开发私有插件(Traefik 官方博客)

    Traefik Proxy 在设计上是一个模块化路由器,允许您将中间件放入您的路由中,并在请求到达预期的后端服务目的地之前对其进行修改. Traefik 内置了许多这样的中间件,还允许您以插件的形式加 ...

  4. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  5. windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...

  6. 应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译

    概述 反编译是一个将目标代码转换成源代码的过程.而目标代码是一种用语言表示的代码 , 这种语言能通过实机或虚拟机直接执行.文本所要介绍的 JD-Eclipse 是一款反编译的开源软件,它是应用于 Ec ...

  7. 在windows下用eclipse + pydev插件来配置python的开发环境

    在windows下用eclipse + pydev插件来配置python的开发环境 一.安装 python 可以到网上下个Windows版的python,官网为:https://www.python. ...

  8. eclipse中JSP开发环境的配置

    1. Java环境 自行百度配置   2. Web Server环境安装: Web Server选择流行的Apache Tomcat .到http://tomcat.apache.org/  处下载, ...

  9. 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码

    在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...

  10. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

随机推荐

  1. pyinstaller 打包exe相关

    -w 只有窗口,没有console -p 加入路径 -F 生成一个exe文件 有虚拟环境时,需要先在cmd中进入虚拟环境,再执行打包程序 # 生成一个exe 无窗口 有icon Pyside2 pyi ...

  2. 前端常见loading动画

    loading动画是前端页面加载时必不可少的元素,好看合适的加载动画会极大的提升用户体验与系统的交互效果.下面为大家提供几种简单的加载动画效果,如果帮助到你了请点赞评论. 1.无限循环的圆圈 < ...

  3. idea中springboot热部署(无需重启项目)

    idea中springboot热部署(无需重启项目) 1.在pom.xml文件中导入依赖 <dependency> <groupId>org.springframework.b ...

  4. 【题解】CF1215C Swap Letters

    题面传送门 解决思路 首先容易得知,两个字符串中 \(b\)(或 \(a\)) 的个数为偶数时,一定有解.为奇数则一定无解. 其次考虑怎么交换.对照样例三: in: 8 babbaabb ababab ...

  5. day01-计算机的本质

    计算机的本质 计算机又称为"电脑": 通电的大脑 意味着我们人类希望计算机通电之后可以跟人脑一样思考问题.解决问题 计算机存储数据的本质 计算机是基于电工作,而电信号只有高低电平两 ...

  6. c++题目:切香肠

    c++题目:切香肠 题目 题目描述 有 n 条香肠,每条香肠的长度相等.我们打算将这些香肠切开后全部分给 k 名客人,且要求每名客人获得一样多的香肠.请问最少需要切几刀?注意一刀只能切断一条香肠,每个 ...

  7. python3爬取CSDN个人所有文章列表页

    前言 我之前写了下载单篇文章的接口函数,结合这篇写的,就可以下载所有个人的所有文章了 代码实现 没什么技术含量就是简单的 xpath 处理,不过有意思的是有一位csdn 员工将自己的博客地址写到源码里 ...

  8. svn 日常使用的错误集锦

    1.SVN:Previous operation has not finished; run 'cleanup' if it was interrupted 当时遇到这个问题时,找了各种解决方案什么要 ...

  9. Node.js躬行记(25)——Web自动化测试

    网页在提测流转给 QA 后,如何能帮他们更有效而准确的完成测试,是我一直在思考的一个问题. QA 他们会对网页编写测试用例,在提测之前会让我们将优先级最高的用例跑通,这在一定程度上能够避免频繁的返工, ...

  10. war包形式安装jenkins

    (1)下载war包 输入命令:java -jar jenkins.war --httpPort=8080,更改端口 重新登录之后,输入密码创建用户等完成设置 (2)结合Tomcat安装: 将jenki ...