我们可以通过JMX监控xmemcached状态,xmemcached使用RMI暴露服务接口:
service:jmx:rmi:///jndi/rmi://ip:7077/xmemcachedServer
xmemcached提供的MBean包括:
MBean
|
描述
|
net.rubyeye.xmemcached.monitor.StatisticsHandlerMBean
|
用于查看Client统计信息
|
net.rubyeye.xmemcached.impl.OptimizerMBean
|
用于调整性能参数
|
net.rubyeye.xmemcached.XMemcachedClientMBean
|
动态添加或者删除节点,查看有效服务器等信息
|
下面我们一起来看一下具体如何来查看和使用java来调用上述服务。
1) 首先下载memcachead程序,windows系统下面我们使用memcached.exe,附件提供了memcached-1.2.6-win32-bin。把它解压到硬盘的一个目录中,例如:C:\memcached-1.2.6-win32-bin。
2) 在 http://code.google.com/p/xmemcached/downloads/list 下载xmemcached-1.3.5-bin-with-dependencies.tar.gz
,在将xmemcached导入到eclipse中。
3) 在导入的工程里面,编写测试代码:
package net.rubyeye.xmemcached.example;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import net.rubyeye.xmemcached.MemcachedClient;
import net.rubyeye.xmemcached.MemcachedClientBuilder;
import net.rubyeye.xmemcached.XMemcachedClientBuilder;
import net.rubyeye.xmemcached.exception.MemcachedException;
import net.rubyeye.xmemcached.utils.AddrUtil;
/**
* 启动参数
* -Dxmemcached.jmx.enable=true -Dxmemcached.rmi.port=7077 -Dxmemcached.rmi.name=xmemcachedServer
* -Dxmemcached.statistics.enable=true
* @author Administrator
*/
public class BaseExample {
public static void main(String[] args) throws IOException {
// 构造builder
MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("localhost:11211"));
MemcachedClient memcachedClient = null;
try {
// 获取客户端连接对象
memcachedClient = builder.build();
// set 键为hello的数据
memcachedClient.set("hello", 0, "Hello,xmemcached");
String value = memcachedClient.get("hello");
System.out.println("hello=" + value);
memcachedClient.delete("hello");
value = memcachedClient.get("hello");
System.out.println("hello=" + value);
} catch (MemcachedException e) {
System.err.println("MemcachedClient operation fail");
e.printStackTrace();
} catch (TimeoutException e) {
System.err.println("MemcachedClient operation timeout");
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
注意需要设置这个类的启动时的JVM参数,内容为:-Dxmemcached.jmx.enable=true -Dxmemcached.rmi.port=7077 -Dxmemcached.rmi.name=xmemcachedServer -Dxmemcached.statistics.enable=true,如下图:
http://my.iteye.com/admin/picture/107450
(可能是RP问题,这里显示不了图片,需要看图的同学情打开上面的URL,看图)
运行该类后,可以通过jconsole去连xmemcached暴露的jmx服务,如下图:
http://my.iteye.com/admin/picture/107452
http://my.iteye.com/admin/picture/107450
(可能是RP问题,这里显示不了图片,需要看图的同学情打开上面的URL,看图)
4) 使用java程序,通过rmi访问这些MBean,程序如下:
package net.rubyeye.xmemcached.example;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import net.rubyeye.xmemcached.XMemcachedClientMBean;
public class RMITest {
public static void main(String[] args) throws Exception {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://127.0.0.1:7077/xmemcachedServer");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
// 依赖接口的调用方式
ObjectName namingName = ObjectName.getInstance("net.rubyeye.xmemcached:type=XMemcachedClient-MemcachedClient-0");
XMemcachedClientMBean proxy = (XMemcachedClientMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, namingName, XMemcachedClientMBean.class, false);
System.out.println(proxy.getServersDescription());
System.out.println(proxy.getName());
}
}
执行结果:
[127.0.0.1:11211(weight=1)]
MemcachedClient-0
需要指出的是:
ObjectName.getInstance("net.rubyeye.xmemcached:type=XMemcachedClient-MemcachedClient-0");
这行代码的getInstance函数的参数,它是ObjectName的字面量,大家可以在上面的图中找到,对源码感兴趣的同学可以在xmemcached的源码中找到:
LedacachedMbeanServer.getInstance().registMBean(
this,
this.getClass().getPackage().getName() + ":type="
+ this.getClass().getSimpleName() + "-"
+ MemcachedClientNameHolder.getName());
就知道是怎么会事情了。
其他几个接口大家自己可以试验下,有什么心得体会写出来一起交流ING。
分享到:
相关推荐
xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务,使用RMI调用JMX服务的详细过程,完整的eclipse工程,直接导入即可用。还用一些运行截图,很有用。 自己写的例子,类名是BaseExample 和RMITest.
java rmi java rmijava rmi javajava rmi java rmi rmi
检测javaRMI反序列化漏洞
java RMI技术实现的网络聊天室 编译通过,很完整的。代码很有参考价值
采用JAVA rmi,带图形界面,完全由自己实现的聊天室,具备基本的聊天功能,可以自己扩充功能
使用Java RMI创建一个分布式议程共享服务。不同的用户可以使用这个共享议程服务执行查询、添加和删除会议的操作。服务器支持会议的登记和清除等功能
java RMI实现代码。分为客户端和服务器端,有清楚的代码注释。
java RMI
在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...
Java RMI 简单示例
JavaRMI.pdf
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
java rmi spring 使用实例,内涵服务端和客户端的源代码,测试可用。
《Java RMI》一书的英文版本,With Java RMI, you'll learn tips and tricks for making your RMI code excel. This book provides strategies for working with serialization, threading, the RMI registry, ...
javaRMI完整版.pdf
Java RMI的应用——学习RMI的简单编程应用。编写一个课程成绩管理程序,要求用Java RMI实现
Java编程rmi实例,给出远程方法调用技术在java方面的具体例子。
Java RMI实例
java rmi远程调用服务器搭建,rmi具体实现步骤说明,
这是本人搜集整理的Java RMI规范,中文版,经过排版 共包括10个章节,2个附录