ZeroMQ--使用jzmq进行编程
一、环境搭建
wget http://download.zeromq.org/zeromq-2.1.7.tar.gz
tar -xzf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make installgit clone https://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install如果没有安装libtool、libuuid-devel则需要先安装,否则安装失败
yum install libtool
yum install libuuid-devel
常见问题:
出现java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or directory异常
原因是未找到zmq动态链接库。
解决方法1:export LD_LIBRARY_PATH=/usr/local/lib
解决方法2:编辑/etc/ld.so.conf文件,增加一行:/usr/local/lib。再执行sudo ldconfig命令
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jzmq in java.library.path
未设置native library
在eclipse设置native library为/usr/local/lib
或在jvm增加参数
-Djava.library.path=/usr/local/lib
或在启动脚本中增加
java -Djava.library.path=/usr/local/lib
二、使用jzmq进行编程
1.创建maven项目,pom.xml的内容参见pom.xml
注意:jzmq的版本不能太高,建议使用2.1.0,目前storm也是使用这个版本的jzmq-2.1.0.jar
否则报: java.lang.UnsatisfiedLinkError: org.zeromq.ZMQ$Socket.nativeInit()V
2.编写Publisher.java,Subscriber.java,参见源代码
Publisher.java
package com.catt.mqtest.pubsub;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zeromq.ZMQ;
import org.zeromq.ZMQ.Context;
import org.zeromq.ZMQ.Socket;public class Publisher {// 等待10个订阅者private static final int SUBSCRIBERS_EXPECTED = 10;// 定义一个全局的记录器,通过LoggerFactory获取private final static Logger log = LoggerFactory.getLogger(Publisher.class);public static void main(String[] args) throws InterruptedException{Context context = ZMQ.context(1);Socket publisher = context.socket(ZMQ.PUB);publisher.bind("tcp://*:5557");try {// zmq发送速度太快,在订阅者尚未与发布者建立联系时,已经开始了数据发布Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}publisher.send("send start......".getBytes(), 0);for (int i = 0; i < 10; i++) {publisher.send(("Hello world "+i).getBytes(), ZMQ.NOBLOCK);}publisher.send("send end......".getBytes(), 0);publisher.close();context.term();}
}
Subscriber.java
package com.catt.mqtest.pubsub;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zeromq.ZMQ;
import org.zeromq.ZMQ.Context;
import org.zeromq.ZMQ.Socket;public class Subscriber {// 定义一个全局的记录器,通过LoggerFactory获取private final static Logger log = LoggerFactory.getLogger(Subscriber.class);public static void main(String[] args) {Context context = ZMQ.context(1);Socket subscriber = context.socket(ZMQ.SUB);subscriber.connect("tcp://192.168.230.128:5557");subscriber.subscribe("".getBytes());int total = 0;while (true) {byte[] stringValue = subscriber.recv(0);String string = new String(stringValue);if (string.equals("send end......")) {break;}total++;System.out.println("Received " + total + " updates. :" + string);}subscriber.close();context.term();}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.catt</groupId><artifactId>mqtest</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>mqtest</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.zeromq</groupId><artifactId>jzmq</artifactId><version>2.1.0</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency></dependencies>
</project>
ZeroMQ--使用jzmq进行编程相关推荐
- Linux(CentOS)安装配置zeromq、jzmq(解决各种问题)
今天为Hadoop配置zeromq.jzmq遇到各种问题,先是编译出错,到编译成功后测试出错等等,下面将我遇到的问题与大家分享一下. 第一个注意点是:必须先编译安装zeromq,然后在编译jzmq,否 ...
- Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,Rabbit ...
- RabbitMQ, ZeroMQ, Kafka 是一个层级的东西吗, 相互之间有哪些优缺点
RabbitMQ是一个AMQP实现,传统的messaging queue系统实现,基于Erlang.老牌MQ产品了.AMQP协议更多用在企业系统内,对数据一致性.稳定性和可靠性要求很高的场景,对性能和 ...
- 详解c语言编程库题,详解C语言编程
C语言作为编程语言,其诞生已经很早,但是在编程语言多样化的今天,C仍然高居TIOBE编程语言排行榜的第一位(2014年5月),而C++语言排位第四.而位居第二位的Java本身就是脱胎于C++语言,第三 ...
- 【转载】我的编程之路——知识管理与知识体系
[https://segmentfault.com/a/1190000004612590] 本文的资料放到了Github Repo (本文介绍的这种笔记排布方式不一定适合于初学者理解) 六年前笔者开始 ...
- [Ubuntu]Scrcpy+Zeromq实现手机屏幕yuv数据传输,并通过OpenCV实现连续播放——(二)(思路+代码解析)
Scrcpy在上一篇博客中有所介绍,并且使用Scrcpy实现了手机屏幕yuv数据的提取([Ubuntu]Scrcpy获取手机屏幕yuv数据_又是谁在卷的博客-CSDN博客).本文将介绍一个当下较为好用 ...
- 阿里的STORM——JSTORM
看介绍文档貌似挺好: https://github.com/alibaba/jstorm 阿里拥有自己的实时计算引擎 类似于hadoop 中的MR 开源storm响应太慢 开源社区的速度完全跟不上Al ...
- linux下storm集群配置,Twitter Storm 系统集群搭建
Storm是什么? Storm是Twitter开源的一个分布式的实时计算系统 使用场景: 数据的实时分析.持续计算.分布式RPC等等. Storm特点(Storm类似手扶电梯,不出故障就会一直运行,h ...
- storm 分布式的实时计算系统
Storm介绍 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网 ...
最新文章
- .NET 3.5(12) - DLINQ(LINQ to SQL)之事务处理和并发处理
- linux常见操作命令及相关延伸
- LAMP 系统性能调优:第2 部分: 优化Apache 和PHP-学习笔记
- pxe linux自动安装系统,通过 PXE 自动安装操作系统(1):部署 PXE Server
- PowerDesigner 逆向工程 从SQL文件转换成PDM 从PDM转成CDM
- springboot使用ImportBeanDefinitionRegistrar 动态注册bean
- Python实现普通二叉树
- 收不到oracle邮件,dovecot不能够收邮件
- (1)Java 教程
- 开课吧课堂:finally如何使用?作用是什么?
- SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext...
- 【No buffer space available】异常解决
- 使用css动画实现loding效果
- gif图用photoshop快速抽帧,压缩,去底,修改时间
- 空间坐标转化——三维转二维
- 怎么改变png图片的大小kb?怎么更改png图片的大小?
- aspx文件怎么用服务器打开,高手教你轻松打开ASPX文件【图文教程】
- 2022武汉软件著作权申请流程
- Effective Java 读书笔记(一)
- ibm服务器p系列小型机,IBM Power系列小型机发展历史
热门文章
- mysql 半同步 主主_MySQL主从,半同步,主主复制
- 微信wechat.class.php,laravel使用组件实现微信网页授权登入
- smith标准型_线性系统理论(八)多项式矩阵Smith-McMillan标准型计算方法
- apache arm 交叉编译_移植apache2 ARM版 – 交叉编译apache2 | 学步园
- linux7 telnet乱码,CentOS7安装配置telnet-server
- android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
- linux怎么启动端口服务,Linux 根据端口快速停止服务并启动的办法
- 目标检测第2步:如何在Windows 10下安装Anaconda?
- java注意的一些细节问题
- 计算机考研计划时间,2019计算机考研时间安排:复习时间规划