- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用下图中提供的 XPUB 和 XSUB 来实现。我已经完成了他们提供的示例,但无法获得 Java 中的 XPUB 和 XSUB。 Here他们在 C 中给出了一个示例,这个示例有点复杂,因为我是 ZeroMQ 的新手。
我正在尝试使用 jni wrapped version 在 android 中使用它.请帮我找一个例子,如何使用 java 在 ZeroMQ 中实现这个带有代理的 Pub-Sub 网络。
目前我指的是http://zguide.zeromq.org/page:all
我试过如下移植它。订阅者.java
public class Subscriber extends Thread implements Runnable {private static final String TAG = "Subscriber";
private Context ctx;
public Subscriber(ZMQ.Context z_context) {
this.ctx = z_context;
}
@Override
public void run() {
super.run();
ZMQ.Socket mulServiceSubscriber = ctx.socket(ZMQ.SUB);
mulServiceSubscriber.connect("tcp://localhost:6001");
mulServiceSubscriber.subscribe("A".getBytes());
mulServiceSubscriber.subscribe("B".getBytes());
while (true) {
Log.d(TAG, "Subscriber loop started..");
String content = new String(mulServiceSubscriber.recv(0));
Log.d(TAG, "Subscriber Received : "+content);
}
}
Publisher.java
public class Publisher extends Thread implements Runnable {private static final String TAG = "Publisher";
private Context ctx;
public Publisher(ZMQ.Context z_context) {
this.ctx = z_context;
}
@Override
public void run() {
super.run();
ZMQ.Socket publisher = ctx.socket(ZMQ.PUB);
publisher.connect("tcp://localhost:6000");
while (true) {
Log.d(TAG, "Publisher loop started..");
publisher.send(("A Hello " + new Random(100).nextInt()).getBytes() , 0);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
XListener.java(现在是一个简单的 Forwarder)
public class XListener extends Thread implements Runnable {private static final String TAG = null;
private Socket publisherX;
private Context ctx;
private Socket subscriberX;
public XListener(ZMQ.Context ctx, ZMQ.Socket subscriberX,
ZMQ.Socket publisherX) {
this.ctx = ctx;
this.subscriberX = subscriberX;
this.publisherX = publisherX;
}
@Override
public void run() {
super.run();
while (true) {
Log.d(TAG, "XListener loop started..");
String msg = new String(subscriberX.recvStr());
Log.v(TAG, "Listener Received: " +"MSG :"+msg);
publisherX.send(msg.getBytes(), 0);
}
}
在应用main()
private void main() { ZMQ.Context ctx = ZMQ.context(1); ZMQ.Socket subscriberX = ctx.socket(ZMQ.XSUB);
subscriberX.bind("tcp://*:6000");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ZMQ.Socket publisherX = ctx.socket(ZMQ.XPUB);
publisherX.bind("tcp://*:6001");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new XListener(ctx, subscriberX, publisherX).start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new XSender(ctx, subscriberX, publisherX).start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new Subscriber(ctx).start();
new Publisher(ctx).start();
}
使用代码我无法收听 XSUB。在移植 espresso.c 时,我无法在 ZMQ 的 java 绑定(bind)中找到任何包装器。如何实现一个简单的代理或者我错过了什么??
最佳答案
哇,我在回答我自己的问题。我错过了将转发器从 publisherX 添加到 subscriberX。这是缺少的代码。现在 XSUB 和 XPUB 可以发送和获取数据了。
public class XSender extends Thread implements Runnable {private static final String TAG = null;
private Socket publisherX;
private Context ctx;
private Socket subscriberX;
public XSender(ZMQ.Context ctx, ZMQ.Socket subscriberX,
ZMQ.Socket publisherX) {
this.ctx = ctx;
this.subscriberX = subscriberX;
this.publisherX = publisherX;
}
@Override
public void run() {
super.run();
while (true) {
// Read envelope with address
Log.d(TAG, "XListener loop started..");
String msg = new String(subscriberX.recv(0));
Log.v(TAG, "Listener Received: " +"MSG :"+msg);
publisherX.send(msg.getBytes(), 0);
}
}
关于android - 如何在 ZeroMQ(jzmq) 3.xx 中使用 XPUB 和 XSUB 实现带有代理的发布-订阅网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14516102/
我正在尝试让 JZMQ 代码在 Hadoop 集群上的一个节点上运行。我在该节点上的 -/usr/local/lib 目录下安装了必要的 native jmzq 库文件。 这是列表 -libjzmq.
我花了一天的时间来解决这个问题,所以如果您计划使用 ZeroMQ 和 java 绑定(bind)设置 CentOS 6.4,也许它可以节省您的时间。 从 github 的源代码安装了 jzmq、lib
查看 ZeroMQ 绑定(bind)。我发现 jzmq last release was almost three years ago .此绑定(bind)是否已弃用? 另一方面,有一个 ZeroMQ
有没有办法检查 JZMQ(zmq 的 java 绑定(bind))套接字是否已连接? ZContext zmqContext = new ZContext(); ZMQ.Socket workerSo
我已经在运行 CentOS 的 VM 上安装了 0MQ,并且我有一个基于 C 的应用程序可以愉快地使用它。但是,我无法让 Java 应用程序通过 JZMQ 绑定(bind)工作。这是我得到的错误: j
简单的问题。为什么在 Java 上“移植”zmq 并将其称为 JeroMQ 是个好主意? 最佳答案 JeroMQ是ZeroMQ社区的官方项目;它是 C++ libzmq 库的完整移植,支持版本 3.2
我的 Java 服务器在使用 JZMQ 的情况下运行良好一段时间。突然断言失败:check () (msg.cpp:220) 在JAVA中无法捕获。并且 java 进程本身已关闭。看起来像是 JNI
大家好,我正在尝试按照位于:https://github.com/nathanmarz/storm/wiki/Installing-native-dependencies 的指示进行操作在 Ubunt
运行以下命令安装 jzmq git clone https://github.com/zeromq/jzmq.git cd jzmq ./autogen.sh ./configure touch sr
我希望这个程序中的线程以锁步方式工作。但是,发送方在等待接收方 catch 之前发送了约 60000 条消息。我对 HWM 有什么误解? 如果我不启动接收线程,那么发送方会在尝试发送第二条消息时阻塞。
我有一个使用外部 dll (zmq) 的 Java 应用程序。当我在 Eclipse 中以 Debug模式运行它时,一切正常。但是,当我将应用程序导出为 Runnable JAR 文件然后尝试运行它时
我在一个交易引擎上工作,在运行时,我从 engine.log 中获取日志,如下所示, 2018_01_02_03_28_20_684 INFO ZMQCommunicatorService REMO
我正在尝试使用 java 风格的 zmq 来测试在我的项目中使用 PGM over TCP 的好处。因此,我更改了 zmq 指南中的天气示例,以使用 epgm 传输。一切都编译并运行,但没有发送或接收
我使用 homebrew 安装了 zmq,然后从 github master 安装了 jzmq。 我收到此错误: java.lang.UnsatisfiedLinkError: no jzmq in
有人知道 ZeroMQ 的 java 绑定(bind)“jzmq”是否可以与 ZeroMQ 版本 3.x.x 一起使用吗?没有关于此的官方信息。有人有想法吗? 最佳答案 确实不好找。但是,浏览 jzm
尝试遵循以下指示:http://github.com/zeromq/jzmq 我使用 Homebrew 安装了 pkg-config,然后运行以下命令: ./autogen.sh 。/配置 配置失败:
我想用java运行zmq。我曾尝试像question那样做 我编译了项目https://github.com/zeromq/libzmq然后https://github.com/zeromq/jzmq
目前,我在让 JZMQ 在 Ubuntu(10.04.2 LTS 服务器,x86)上编译时遇到了严重的问题。我已经从源代码安装了 0MQ,但是为 JZMQ 构建的 debian 包失败了: dpkg-
我有一个使用 ZMQ 的 Java 应用程序。我已经能够在我的 Win7 PC 上运行它,我将 jzmq.dll 放在 jar 可执行文件所在的同一文件夹中,然后我通过命令“java -jar mya
我使用 OpenPGM 5.2.122 在 Java (JDK 7) 中针对 ZeroMQ PUB 套接字通过 Windows 7 上的 MULTICAST channel 发布数据编写了一个简单的测
我是一名优秀的程序员,十分优秀!