浏览 5465 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-24
看到不少开源第三方的memcached连接工具(xmemcached),都采用NIO方式. 于是就有了一个想法用mina作为底层NIO框架与memcached连接. 希望能给学习Mina的新人帮助. 能力有限项目还没有很好完善.不过基本的相关操作已实现. 如果大家有兴趣和我一起完善这个项目,请站内信联络. 源码(svn): http://asksite.googlecode.com/svn/trunk/minamemcahed 测试类及相关API调用 public class CacheTest { static MinaConnect mc = null; static LinkedList<CacheFilter> filterList = new LinkedList<CacheFilter>(); @BeforeClass public static void init() { List<MemCachedAddress> addreeList = new ArrayList<MemCachedAddress>(); //memcached server ip address and port InetSocketAddress address1 = new InetSocketAddress("127.0.0.1", 11211); InetSocketAddress address2 = new InetSocketAddress("192.168.1.105",11212); //add memcached server addreeList.add(new MemCachedAddress(address1, 3)); addreeList.add(new MemCachedAddress(address2, 7)); mc = new MinaConnect(addreeList); //start connect mc.connect(); } @AfterClass public static void destory() { mc.shutDown(); } @Test @Ignore public void testSet() throws Exception { User user = new User(); user.setId(1); user.setName("tina"); boolean result = mc.set("name", 0, user); System.out.println(result); } @Test public void testGet() throws Exception { User user = (User) mc.get("name"); System.out.println(user.getName()); /* * user = (User) mc.get("user2"); System.out.println(user.getName()); * user = (User) mc.get("user3"); System.out.println(user.getName()); */ } @Test @Ignore public void testReplace() throws Exception { User user = new User(); user.setId(1); user.setName("replacetest"); boolean result = mc.replace("test2", 10000, user); System.out.println(result); } @Test @Ignore public void testDelete() throws Exception { boolean result = mc.delete("test2"); System.out.println(result); } @Test @Ignore public void testIncr() throws Exception { long i = mc.incr("incrtest", 2); System.out.println(i); } @Test @Ignore public void testGets() throws Exception { User[] users = new User[10]; for (int i = 0; i < users.length; i++) { users[i] = new User(); users[i].setId(i); users[i].setName("test" + i); if (i == 3) { InetSocketAddress address2 = new InetSocketAddress( "192.168.1.105", 11212); mc.removeServer(address2); } boolean result = mc.set("user" + i, 0, users[i]); System.out.println(result); } List<String> list = new ArrayList<String>(); for (int i = 0; i < 10; i++) { list.add("user" + i); } Map<String, Object> map = mc.gets(list); Iterator<String> keySet = map.keySet().iterator(); while (keySet.hasNext()) { User user = (User) map.get(keySet.next()); System.out.println(user.getName()); } } @Test @Ignore public void testSomeNoreplay() throws Exception { User pan = (User) mc.get("test"); System.out.println(pan.getName()); } } spring 定义服务 <bean id="minaBean" class="com.memcached.spring.MinaMemcachedFactoryBean"> <property name="address"> <list> <value>127.0.0.1:11211</value> </list> </property> <property name="weights"> <list> <value>3</value> </list> </property> </bean> 相关jar依赖 mina 和 mina依赖的jar 包 jar包在附件中 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-02-25
构思不错,正学习Mina有用.
|
|
返回顶楼 | |
发表时间:2010-02-25
memcached 写道 构思不错,正学习Mina有用.
希望对你有用,多提建议. |
|
返回顶楼 | |
发表时间:2010-02-25
jboss 的 netty 也不错
|
|
返回顶楼 | |
发表时间:2010-02-25
lvgang 写道 jboss 的 netty 也不错 好像听说过比mina的性能还要好,不知稳定性怎么样. |
|
返回顶楼 | |
发表时间:2010-02-25
pan_java 写道 lvgang 写道 jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样. 我记得都是同一个作者。 |
|
返回顶楼 | |
发表时间:2010-02-26
nishizhutou 写道 pan_java 写道 lvgang 写道 jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样. 我记得都是同一个作者。 都是lee写的,不过netty3性能确实比mina好 plurk的comet server就是用netty3实现的 引用 Using Netty we have comet running on 100.000+ open connections - this uses some GB of memory and 20% of CPU on a quad core server. I.e. we have solved the C10k * 10 problem using non-blocking technology and some pretty impressive libraries (namely Java NIO and Netty). A big kudos goes to Trustin Lee for his amazing work on Netty! |
|
返回顶楼 | |
发表时间:2010-02-28
nishizhutou 写道 pan_java 写道 lvgang 写道 jboss 的 netty 也不错
好像听说过比mina的性能还要好,不知稳定性怎么样. 我记得都是同一个作者。 是一个韩国人,trustin Lee。我最近在看netty的源代码,觉得netty的建模比较好 |
|
返回顶楼 | |
发表时间:2010-02-28
有空学习一下netty.
|
|
返回顶楼 | |
发表时间:2010-03-23
有空看看开源bbossgroups项目中基于mina协议的rpc调用框架
很实用也很简单: 1.客服端和服务端配置以下组件(基于bboss-aop框架): <property name="rpc.test" singlable="true" class="org.frameworkset.spi.remote.RPCTest"/> 2.获取远程组件实例 单点调用 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test"); 多点调用 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test"); 组播调用 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test"); 单点调用-传递认证信息 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::172.16.17.216:1186)/rpc.test?user=admin&password=123456"); 多点调用-传递认证信息 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?user=admin&password=123456"); 组播调用-传递认证信息 RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::all)/rpc.test?user=admin&password=123456"); 3.远程方法调用 Object count = testInf.getCount(); 4.调用结果处理 单点调用的结果就是服务接口返回的值,无需处理。如果方法调用失败,系统将抛出具体的远程异常。 多点调用和组播调用的结果处理方法一样,以多点调用为例: RPCTestInf testInf = (RPCTestInf)BaseSPIManager.getBeanObject("(mina::192.168.11.102:1186;192.168.11.102:12346)/rpc.test?User=admin&password=123456"); Object count = testInf.getCount(); Object count = testInf.getCount(); 获取192.168.11.102:1186返回的结果: Object count_1186 = BaseSPIManager.getRPCResult("192.168.11.102", "1186", count);如果返回值是异常,那么直接抛出该异常。 或者 Object count_1186 = BaseSPIManager.getMinaRPCResult ("192.168.11.102:1186", count);如果返回值是异常,那么直接抛出该异常。 或者 Object count_1186 = BaseSPIManager.getRPCResult("192.168.11.102:1186", count, org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。 获取192.168.11.102:12346返回的结果: Object count_12346 = BaseSPIManager.getRPCResult("192.168.11.102", "12346", count); 如果返回值是异常,那么直接抛出该异常。 或者 Object count_12346 = BaseSPIManager.getMinaRPCResult ("192.168.11.102:12346", count); 或者 Object count_12346 = BaseSPIManager.getRPCResult("192.168.11.102:12346", count, org.frameworkset.remote.Target.BROADCAST_TYPE_MINA); 如果返回值是异常,那么直接抛出该异常。 很简单吧 详细信息参考博客文章: http://blog.csdn.net/yin_bp/archive/2010/03/20/5398418.aspx bbossgroups项目下载地址: https://sourceforge.net/projects/bboss/files/ |
|
返回顶楼 | |