`
kavy
  • 浏览: 884155 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ZeroMQ--使用jzmq进行编程

 
阅读更多

http://my.oschina.net/cloudcoder/blog/200989

 

一、环境搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 install
 
git 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  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<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-3.2.5.tar.gz、jzmq.tar.gz、Python-2.6.6.tar.bz2、storm-0.8.0.zip下载

    7. 编写Storm拓扑,使用Python或其他支持的语言,利用ZeroMQ和jZMQ进行数据通信。 8. 将拓扑提交到nimbus进行执行,监控UI以查看拓扑的运行状态和性能。 以上就是关于这些文件的详细说明和如何使用它们来搭建Storm...

    zeromq+jzmq win 64编译

    4. **跨平台**:zeromq可在多种操作系统和编程语言上运行,包括Windows、Linux、Mac OS X等,并且有多种语言的绑定库,如C++、Python、Java(jzmq)等。 jzmq是Java与zeromq交互的桥梁,它允许Java开发者使用zeromq...

    jzmq编译64bit

    标题“jzmq编译64bit”涉及的是在64位操作系统环境下编译和使用jzmq,这是一个Java语言的ZeroMQ库绑定。ZeroMQ(又称ØMQ、零MQ)是一个高性能、轻量级的消息队列系统,它提供了一种分布式计算的模式,能够使应用...

    ZeorMQ-JZMQ-Win64.7z

    此压缩文件包含了一些必要的库文件和执行程序,旨在提供一个完整的环境,用于在Java中使用ZeroMQ进行通信。 ZeroMQ,又名0MQ或ØMQ,是一个高级消息队列库,它提供了一种分布式的、高性能的消息传递机制。ZeroMQ...

    ZeroMQ jzmq Win32编译发布文件

    **零MQ (ZeroMQ) 和 jZMQ...以上就是关于"ZeroMQ jzmq Win32编译发布文件"的相关知识,包括ZeroMQ和jZMQ的基本介绍、文件组成、使用环境以及基本的使用步骤和示例代码。希望对你理解ZeroMQ及其在Java中的应用有所帮助。

    zeromq应用于java的.jar .lib .dll

    2. **jzmq**: jzmq是zeromq的Java绑定,它允许Java开发者直接在Java代码中使用zeromq的功能。jzmq.dll是jzmq的动态链接库,它实现了Java Native Interface (JNI),使Java代码能够调用C++编写的zeromq库。同时,jzmq....

    zeroMQ/jzmq java例子

    "zeroMQ_Demo"压缩包中的代码示例涵盖了上述各种模式,通过阅读和运行这些示例,你可以直观地了解如何在Java中使用jzmq实现ZeroMQ的各种功能。这些示例将帮助你掌握ZeroMQ的基本用法,为以后的项目开发打下基础。 ...

    jzmq.tar.gz

    **标题解析:** "jzmq.tar.gz" 是一个压缩包文件,其...综上所述,这个 jzmq.tar.gz 文件提供了一个修正过的 jzmq 包,解决了一些安装问题,并且附带了安装指南,对于使用 Java 进行 ZeroMQ 通信的开发者来说非常有用。

    jzmq2.13-api

    `jzmq`是ZeroMQ在Java平台上的接口,`api`指的是应用程序编程接口,它是开发者与库交互的桥梁。`java`则表明这个库是为Java语言设计的,提供了Java程序员使用ZeroMQ所需的所有类和方法。 **文件列表:** 1. `jzmq ...

    jzmq-master.zip

    这只是一个基础示例,实际使用中可以根据需要进行扩展和定制。 总结,JZMQ作为ZeroMQ的Java实现,为Java开发者提供了高效、灵活的网络通信能力。无论是构建微服务、数据流处理还是实时系统,JZMQ都是值得信赖的工具...

    ZeroMQ及java绑定

    通过libzmq.dll、jzmq.dll和zmq.jar,开发者可以轻松地在Java应用中集成ZeroMQ的功能,实现高效、可靠的消息传递,而无需深入理解底层网络编程的复杂性。无论是构建大型的微服务架构,还是解决特定场景下的并发通信...

    JZMQ的X64编译包(jar和dll)

    综上所述,这个压缩包提供了在64位Windows系统下使用Java进行ZeroMQ编程的基础,包含的`zmq.jar`和`jzmq.dll`是实现这一目标的关键组件。开发者可以通过导入`zmq.jar`来调用JZMQ的API,同时`jzmq.dll`确保了与底层...

    zeroMQ应用于java的jar和lib库

    ZeroMQ,也称为0MQ或ØMQ,是一个高性能、轻量级的消息传递库,它提供了一种消息队列中间件的抽象,适用于多种编程语言,包括Java。在Java环境中使用ZeroMQ,通常需要对应的jar库和lib库来支持。本文将深入探讨...

    jzmq_x64 dll和jar

    JNI是Java平台的一部分,允许Java代码和其他编程语言进行交互,这样Java开发者就可以利用C/C++库提供的性能优势。 最后,zmq.jar是Java库,包含了jzmq的所有Java类和方法,供Java开发者在项目中直接导入和使用。...

    ZeroMQ 用于JAVA的jar和lib库

    1. **jzmq是ZeroMQ的Java绑定**:它提供了Java API,使得Java开发者可以直接调用ZeroMQ的函数,进行低延迟、高吞吐量的网络通信。 2. **版本3.1**:jzmq 3.1版本可能不包含最新特性,但对JDK 1.6和1.7的支持确保了...

    ZeroMQ(java)window库

    ZeroMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。(摘自百度百科) ZMQ官方网址http://zeromq.org/ ZMQ本身只提供了C++版本的下载,...

    ZeroMQ4 0 5 dll jar java 用下载

    在Java中使用ZeroMQ,你需要包含jzmq库,这是一个Java绑定,允许Java程序与ZeroMQ进行交互。在提供的资源中,"jzmq-master"可能包含了编译jzmq库所需的源代码,这使得Java开发者可以将ZeroMQ的功能集成到他们的项目...

    zeromq的request-reply问答模式的jave实现

    Java是zeromq支持的多种编程语言之一,通过jeromq库可以方便地在Java环境中使用zeromq。 本项目是一个基于Eclipse的maven工程,已经配置好相关依赖,可以直接运行。"com.zeromq.req-rep"这个目录名暗示了源代码中...

    纯java版本的ZeroMQ,可用在Android上

    只有一个名为“JZMQ”的条目,这可能是JZMQ库的源代码或者相关资源,开发者可以通过分析和修改这个文件来定制自己的ZeroMQ Java客户端,或者理解其内部工作原理,以便更好地在Android应用中集成和使用ZeroMQ。...

Global site tag (gtag.js) - Google Analytics