activemq插件在eos中的开发
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
然后在
- #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中的开发的更多相关文章
- 在ASP.NET MVC应用中开发插件框架(中英对照)
[原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I’v ...
- Eclipse中一个开发AspectJ的插件安…
eclipse4.2 EE版本插件安装 Eclipse最新版本Juno版本发布.部分插件版本跟不上. 选择自己需要的插件安装. eclipse http://www.eclipse.org/downl ...
- 在 Traefik Proxy 2.5 中使用/开发私有插件(Traefik 官方博客)
Traefik Proxy 在设计上是一个模块化路由器,允许您将中间件放入您的路由中,并在请求到达预期的后端服务目的地之前对其进行修改. Traefik 内置了许多这样的中间件,还允许您以插件的形式加 ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境 http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A ...
- 应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译
概述 反编译是一个将目标代码转换成源代码的过程.而目标代码是一种用语言表示的代码 , 这种语言能通过实机或虚拟机直接执行.文本所要介绍的 JD-Eclipse 是一款反编译的开源软件,它是应用于 Ec ...
- 在windows下用eclipse + pydev插件来配置python的开发环境
在windows下用eclipse + pydev插件来配置python的开发环境 一.安装 python 可以到网上下个Windows版的python,官网为:https://www.python. ...
- eclipse中JSP开发环境的配置
1. Java环境 自行百度配置 2. Web Server环境安装: Web Server选择流行的Apache Tomcat .到http://tomcat.apache.org/ 处下载, ...
- 在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码
在vim中 安装php的xdebug和 vdebug插件, 在vim中进行调试php代码 参考: http://www.cnblogs.com/qiantuwuliang/archive/2011/0 ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
随机推荐
- Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题
问题一:页面自动跳转到 80 端口 问题描述 最近在使用Nginx反代一个Spring Boot项目中碰到了一个问题,使用 Spring Boot 中的 redirect: 进行页面跳转的时候,通过 ...
- SpringCloud(七) - 微信支付
1.开发文档 微信开发文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 安全规范:https://pay.weixin.q ...
- Vue3 企业级优雅实战 - 组件库框架 - 3 搭建组件库开发环境
前文已经初始化了 workspace-root,从本文开始就需要依次搭建组件库.example.文档.cli.本文内容是搭建 组件库的开发环境. 1 packages 目录 前面在项目根目录下创建了 ...
- 【网络】安装Nginx笔记
目录 前言 安装前先更新下 安装依赖库 下载Nginx Nginx编译配置 编译&安装&验证nginx Nginx服务配置 配置SSL 参考 前言 up安装nginx主要是为了在服务器 ...
- C#自定义控件开发(1)
自定义控件可以用组件或者用户控件来开发,如果是基于基础控件,进行一些扩展,那么可以使用组件,其它的情况可以使用用户控件. 首先新建一个类库项目,然后添加一个组件,取名为ButtonExtend,再添加 ...
- 【云原生 · Kubernetes】kubernetes v1.23.3 二进制部署(三)
5 部署 etcd 集群 etcd 是基于 Raft 的分布式 KV 存储系统,由 CoreOS 开发,常用于服务发现.共享配置以及并发控制(如 leader 选举.分布式锁等). kubernete ...
- 学习ASP.NET Core Blazor编程系列十——路由(下)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- [排序算法] 归并排序 (C++)
归并排序解释 归并排序 Merge Sort 是典型的分治法的应用,其算法步骤完全遵循分治模式. 分治法思想 分治法 思想: 将原问题分解为几个规模较小但又保持原问题性质的子问题,递归求解这些子问题, ...
- AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵
作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...
- day33 过滤器filter & 监听器listener & 利用反射创建BaseServlet实现调用自定义业务方法
Filter过滤器 Fileter可以实现: 1)客户端的请求访问servlet之前拦截这些请求,对用户请求进行预处理 2)对HttpServletResponse进行后处理: 注意 多个Filter ...