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. Xpath 高级用法

    xpath 高级用法 1. 匹配当前节点下的所有: .// . 表示当前 // 表示当前标签下的所有标签 注: 要配合使用 2. 匹配某标签的属性值: /@属性名称 这里以input里的value值为 ...

  2. CF452F等差子序列 & 线段树+hash查询区间是否为回文串

    记录一下一个新学的线段树基础trick(真就小学生trick呗) 给你一个1到n的排列,你需要判断该排列内部是否存在一个3个元素的子序列(可以不连续),使得这个子序列是等差序列.\(n\) <= ...

  3. 【ASP.NET Core】MVC控制器的各种自定义:应用程序约定的接口与模型

    从本篇起,老周会连发N篇水文,总结一下在 MVC 项目中控制器的各种自定义配置. 本文内容相对轻松,重点讨论一下 MVC 项目中的各种约定接口.毕竟你要对控制器做各种自定义时,多数情况会涉及到约定接口 ...

  4. Latex数学公式学习

    要想博客写的更详细,更好,那么具体详细的数学推导这一部分是少不了的,不仅要好看还要方便输入那些更为复杂的符号,因此学习Latex就是必不可少的啦,说不定过几天就要用嘞! 本篇文章参考自超详细 LaTe ...

  5. 图解S.O.L.I.D原则

    如果您熟悉面向对象的编程,那么您可能已经听说过SOLID原理. 这五项软件开发原则是构建软件时要遵循的准则,以便于扩展和维护. 它们受到软件工程师Robert C. Martin的欢迎. 在线上有很多 ...

  6. 如何精简 Prometheus 的指标和存储占用

    前言 随着 Prometheus 监控的组件.数量.指标越来越多,Prometheus 对计算性能的要求会越来越高,存储占用也会越来越多. 在这种情况下,要优化 Prometheus 性能, 优化存储 ...

  7. PHP日期加减计算

    PHP 标准的日期格式 date("Y-m-d H:i:s"); PHP 简单的日期加减计算 <?php date_default_timezone_set('PRC'); ...

  8. Zabbix技术分享——docker组件编译使用教程

    docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源,它可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器上,还可以实现 ...

  9. Android ViewPager2 + Fragment + BottomNavigationView 联动

    Android ViewPager2 + Fragment + BottomNavigationView 联动 本篇主要介绍一下 ViewPager2 + Fragment + BottomNavig ...

  10. python模块/导入模块

    索引取值与迭代取值的差异 l1 = [1,2,3,4,5] 1.索引取值 可以任意位置任意次数的取值 不支持无序类型的数据取值 print(l1[3]) print(l1[3]) #可以直接获取任意位 ...