JGroups

JGroups实现了组通讯的组件。

JGroups使用场合:

服务器集群

多服务器通讯

服务器复制

分布式缓存

更多JGroups信息可以参考whitesock的javaeye博客

无论是JGroups还是前面文章提到的ActiveMQ都是能够实现网络通信的。下面分享一个使用JGroups进行聊天的例子程序,大家感受下使用JGroups进行简单编程的例子

 

package ttstest;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;

import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;
import org.jgroups.util.Util;

public class SimpleChat {
	private JChannel channel;
	private List<String> state = new LinkedList<String>();
	private String userName = System.getProperty("user.name", "guchao");

	public void start() throws Exception {
	channel = new JChannel("./conf/udp.xml");
		channel.setReceiver(new ReceiverAdapter() {
			//回调方法,用来接收消息Message
			public void receive(Message msg) {
				System.out.println(msg.getSrc() + ": " + msg.getObject());
				synchronized(state) {
					state.add((String)msg.getObject());
				}
			}
			//回调方法,该方法能够得到新的view信息
			public void viewAccepted(View view) {
				System.out.println("view accepted: " + view);
			}

			public byte[] getState() {
				synchronized(state) {
					try {
						return Util.objectToByteBuffer(state);
					}
					catch(Exception e) {
						e.printStackTrace();
						return null;
					}
				}
			}

			@SuppressWarnings("unchecked")
			public void setState(byte[] new_state) {
				try {
					List<String> list=(List<String>)Util.objectFromByteBuffer(new_state);
					synchronized(state) {
						state.clear();
						state.addAll(list);
					}
					System.out.println("received state (" + list.size() + " messages in chat history):");
					for(String str: list) {
						System.out.println(str);
					}
				}
				catch(Exception e) {
					e.printStackTrace();
				}
			}
		});
		channel.connect("ChatCluster");
		channel.getState(null, 10000);

		//
		sendMessage();

		//
		channel.close();
	}

	private void sendMessage() throws Exception {
		boolean succeed = false;
		BufferedReader br = null;
		try {
			br = new BufferedReader(new InputStreamReader(System.in));
			while(true) {
				System.out.print(">");
				System.out.flush();
				String line = br.readLine();
				if(line != null && line.equals("exit")) {
					break;
				} else {
					Message msg = new Message(null, null, "[" + userName + "]" + line);
					channel.send(msg);
				}
			}
			succeed = true;
		} finally {
			if(br != null) {
				try {
					br.close();
				} catch (Exception e) {
					if(succeed) {
						throw e;
					}
				}
			}
		}
	}

	public static void main(String args[]) throws Exception {
		new SimpleChat().start();
	}
}

 

聪明的你应该可以发现,上面的这个例子通过jgroups发送消息的方式同步服务器的内存!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JGroups是一个开源的纯java编写的可靠的群组通讯工具。其是一个可靠的组播通讯工具集(需要说明的是,这并不是说必须要使用IP Multicast,JGroups也可以使用TCP来实现)。其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展。其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈,对于每个产品都有不同的可靠性需求。这种协议栈可以让用户定义的自己可靠性指标和性能指标。JGroups可以用来创建一个组,这个组中的成员可以给其他成员发送消息。   JGroups使用灵活的协议栈,这也是JGroups最强大(the most powerful)的功能,它允许开发人员配置协议栈来适用于他们自己的应用需求和网络特征。这样做的好处在于,开发人员只需要关注他们使用到的协议。通过组合和匹配各种协议来满足各种不同应用的需求。   JGroups的主要功能如下:   1)创建和删除组,组成员可以分布在局域网或广域网中。   2)组成员加入和离开组   3)成员关系的自动侦测并通知成员的加入,离开和丢失(原文是crashed,大意就是说没有通知的离开吧)   4)侦测并删除丢失的成员   5)发送和接收成员到组的消息(点到多点)   6)发送和接收成员到成员的消息(点到点)   JGroups 适合使用场合服务器集群cluster、多服务器通讯、服务器replication(复制)、分布式cache缓存等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值