我是靠谱客的博主 爱笑画笔,最近开发中收集的这篇文章主要介绍JeroMQ简单应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

JeroMQ的相关教程可以参考http://blog.csdn.net/kobejayandy/article/category/1628047/2以上的教程中几种模式都有讲解,这里不再复述。目前工作中有这样一个需求,Pub端发送消息,服务器接收到消息并Pub给Sub端,然后再回复Pub端。这里就不能用JeroMQ中自带的proxy,因为需要一个回复的过程,不过可以参考proxy的实现思想,Pub端与服务器间通过Request/Response模式进行连接,服务器与Sub端间通过Publish/Subscribe模式进行连接,服务器在将消息pub给Sub端后再给Pub端回复。

首先是最简单的Sub端,只要接收就好了,和简单的Pub/Sub模式没有区别。

import org.zeromq.ZMQ;

public class Subscriber {
	public static void main(String args[]) {
		ZMQ.Context context = ZMQ.context(1);
		ZMQ.Socket subscriber = context.socket(ZMQ.SUB);
		subscriber.connect("tcp://127.0.0.1:5001");
		subscriber.subscribe("Topic".getBytes());
		while (!Thread.currentThread().isInterrupted()) {
			byte[] message = subscriber.recv();
			System.out.println("receive : " + new String(message));
		}
		subscriber.close();
		context.term();
	}
}


接下来是Pub端,虽然叫做Pub端,但实际用的是REQ类型的Socket

import org.zeromq.ZMQ;

public class Pub {
	public static void main(String[] args) {
		int count = 0;
		ZMQ.Context context = ZMQ.context(1);
		ZMQ.Socket socket = context.socket(ZMQ.REQ);
		socket.connect("tcp://127.0.0.1:5000");
		String request = "Topic"+"hello";	
		while(!Thread.currentThread ().isInterrupted ()){
			socket.send(request.getBytes());
			byte[] response = socket.recv();
			System.out.println("接收到第:"+(++count)+"条消息,内容为:" + new String(response));
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}
最后是服务器

package com.aurora.zhj.req;
import org.zeromq.ZMQ;


public class Server {

	public static void main(String[] args) {
		ZMQ.Context context = ZMQ.context(1);
		ZMQ.Socket socket = context.socket(ZMQ.REP);
		socket.bind ("tcp://127.0.0.1:5000");
		ZMQ.Socket publisher = context.socket(ZMQ.PUB);
                publisher.bind("tcp://127.0.0.1:5001");
		while(!Thread.currentThread ().isInterrupted ()){
			byte[] request = socket.recv();
			String message = new String(request);
			publisher.send(message.getBytes());
			String response = "服务器接收成功";  
			socket.send(response.getBytes());
		}
		//publisher.close();
		//context.term(); 
	}

}
实际上,想要实现Pub/Sub模式,Pub端和Sub端直接连就好了,这么做只是为了在这之间增加一层服务器,后续要实现服务器的高可用,保证消息不漏发、不重发。

最后

以上就是爱笑画笔为你收集整理的JeroMQ简单应用的全部内容,希望文章能够帮你解决JeroMQ简单应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部