`

征服 Kestrel + XMemcached

阅读更多
接上一篇 征服Kestrel,介绍XMemcached对于Kestrel的支持实现。

关于XMemcached具体代码,可以参考Memcached笔记——(二)XMemcached&Spring集成

这里为了代码简洁,直接使用Spring+XMemcached集成模式,先给出Spring的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
>
	<!-- http://code.google.com/p/xmemcached/wiki/Spring_Integration -->
	<bean
		id="memcachedClientBuilder"
		class="net.rubyeye.xmemcached.XMemcachedClientBuilder"
		p:connectionPoolSize="${kestrel.connectionPoolSize}"
		p:failureMode="${kestrel.failureMode}"
	>
		<!-- XMemcachedClientBuilder have two arguments.First is server list,and 
			second is weights array. -->
		<constructor-arg>
			<list>
				<bean class="java.net.InetSocketAddress">
					<constructor-arg>
						<value>${kestrel.server1.host}</value>
					</constructor-arg>
					<constructor-arg>
						<value>${kestrel.server1.port}</value>
					</constructor-arg>
				</bean>
			</list>
		</constructor-arg>
		<constructor-arg>
			<list>
				<value>${kestrel.server1.weight}</value>
			</list>
		</constructor-arg>
		<property name="commandFactory">
			<bean class="net.rubyeye.xmemcached.command.KestrelCommandFactory" />
		</property>
		<property name="sessionLocator">
			<bean class="net.rubyeye.xmemcached.impl.KetamaMemcachedSessionLocator" />
		</property>
		<property name="transcoder">
			<bean class="net.rubyeye.xmemcached.transcoders.SerializingTranscoder" />
		</property>
	</bean>
	<!-- Use factory bean to build memcached client -->
	<bean
		id="memcachedClient"
		factory-bean="memcachedClientBuilder"
		factory-method="build"
		destroy-method="shutdown" />
</beans>


注意:这里要使用KestrelCommandFactory
<property name="commandFactory">
	<bean class="net.rubyeye.xmemcached.command.KestrelCommandFactory" />
</property>


注意:KestrelCommandFactory会在数据头加一个4字节的flag,支持存储任意可序列化类型。(从我的理解就是标记消息长度 )。如果收发双方Client不同,为确保移植性,需要将数据转为String格式,舍弃这个flag!
	<bean
		id="memcachedClient"
		factory-bean="memcachedClientBuilder"
		factory-method="build"
		destroy-method="shutdown"
	>
		<!-- 如果收发双方使用Client不同,开启该选项 -->
		<property
			name="primitiveAsString"
			value="true" />
	</bean>

如果开启上述选项,则不能支持序列化操作,仅支持String类型!!!

附kestrel.properties:
#连接池大小即客户端个数
kestrel.connectionPoolSize=50
kestrel.failureMode=true
#server1
kestrel.server1.host=10.11.155.24
kestrel.server1.port=22133
kestrel.server1.weight=1


做一个简要的TestUnit:
import static junit.framework.Assert.*;
import net.rubyeye.xmemcached.MemcachedClient;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Kestrel 测试
 * 
 * @author Snowolf
 * @version 1.0
 * @since 1.0
 */
public class KestrelTest {

        // 队列名称
	private final static String QUEUE_NAME = "KQ";

	private ApplicationContext app;
	private MemcachedClient memcachedClient;

	/**
	 * @throws java.lang.Exception
	 */
	@Before
	public void before() throws Exception {
		app = new ClassPathXmlApplicationContext("applicationContext.xml");
		memcachedClient = (MemcachedClient) app.getBean("memcachedClient");
	}

	/**
	 * 发包测试
	 */
	@Test
	public void send() {

		for (int i = 0; i < 100; i++) {
			try {
				memcachedClient.set(QUEUE_NAME, 0, i);
			} catch (Exception e) {
				fail(e.getMessage());
				e.printStackTrace();
			}
		}
	}

	/**
	 * 收包测试
	 */
	@Test
	public void receive() {
		Integer value;
		try {
			while (true) {
				value = (Integer) memcachedClient.get(QUEUE_NAME);
				if (value == null) {
					break;
				}
				System.out.println(value);
			}
		} catch (Exception e) {
			fail(e.getMessage());
			e.printStackTrace();
		}
	}
}

可通过上述代码进行服务的简要测试,同样可作为Kestrel+XMemcached接入项目的参考实现!


简述:
  • 发包服务持续将数据SET到队列KQ中
  • 收包服务持续将数据从队列KE中GET出来

队列服务,都是基本概念,队首出队,队尾入队,适用于异步消息传输。
Kestrel基本参照Memcached协议,可恢复,确保服务重启后可以保存重启前的消息队列,也就是不会丢消息。
依靠XMemcahed,可以做Kestrel集群,分布式扩充Kestrel服务!

相关工程代码,详见附件!


相关链接:
征服 Kestrel
征服 Kestrel + XMemcached
征服 Kestrel + XMemcached + Spring TaskExecutor
2
15
分享到:
评论
3 楼 snowolf 2012-08-21  
cpjsjxy 写道
亲,怎么被踩的这么狠?

踩,也是一种关注。。。哈哈哈
2 楼 cpjsjxy 2012-08-21  
亲,怎么被踩的这么狠?
1 楼 qq443507232 2012-07-30  
始终跑在技术最前边   

相关推荐

    征服 Kestrel + XMemcached + Spring TaskExecutor

    标题中的“征服 Kestrel + XMemcached + Spring TaskExecutor”揭示了本次讨论的核心内容,涉及到三个关键的技术组件:Kestrel、XMemcached以及Spring的TaskExecutor。这些技术都是在构建高性能、可扩展的分布式系统...

    kestrel-task-executor:Kestrel + XMemcached + Spring TaskExecutor

    【Kestrel任务执行者:Kestrel + XMemcached + Spring TaskExecutor】 在Java开发领域,高效的任务调度和执行是关键部分,特别是在分布式系统中。这个项目名为"kestrel-task-executor",它结合了Kestrel消息队列、...

    一个超级简单方便的网关,基于Kestrel+Yarp实现的网关 支持动态配置路由,支持动态配置集群,支持动态配置HTTPS证书

    **FastGateway:基于Kestrel+Yarp的高效API网关** FastGateway是一个轻量级且功能强大的API网关,其设计目标是提供一个简单、便捷的解决方案,以支持动态配置路由、集群管理和HTTPS证书配置。它利用了.NET Core中的...

    征服 Kestrel

    【标题】:“征服 Kestrel” Kestrel,这个名字在IT行业中通常指的是Microsoft开发的一款开源、高性能、异步网络库,它是ASP.NET Core框架的一部分,用于构建web服务器。Kestrel设计的目标是提供一个轻量级、可靠且...

    在.NET 6.0上使用Kestrel配置和自定义HTTPS.doc

    IIS 充当起了反向代理,将流量转发给 Kestrel 并管理 Kestrel 进程。在 Linux 上,我们通常使用 NGINX 作为 Kestrel 的反向代理。 三、设置 Kestrel 在 ASP.NET Core 3.0 及更高版本,Kestrel 属于框架默认的配置...

    C#Asp.net Core MVC开发WMS仓库仓储管理系统源码数据库 SQL2014源码类型 WebForm

    Kestrel+nginx bootstrap、adminlte、bootstrap-table、bootstrap-select、bootstrap-treeview等 功能说明: 系统管理:角色管理/权限管理,部门管理,用户管理,数据字典 基础资料:物料管理,客户管理,供应商...

    MF00676-WMS仓库仓储管理系统源码.zip

    Kestrel+nginx bootstrap、adminlte、bootstrap-table、bootstrap-select、bootstrap-treeview等 功能说明: 系统管理:角色管理/权限管理,部门管理,用户管理,数据字典 基础资料:物料管理,客户管理,供应商...

    Kestrel持久化队列服务器

    **Kestrel持久化队列服务器详解** Kestrel是一款高性能、轻量级的消息队列系统,最初由Twitter开发并开源。它主要被设计用来处理实时流数据,提供了一个简单的基于HTTP的API来发送和接收消息。Kestrel的一个关键...

    ASP.NET Core Kestrel 中使用 HTTPS (SSL)

    在ASP.NET Core中,如果在Kestrel中想使用HTTPS对站点进行加密传输,可以按照如下方式  申请证书  这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件。  添加NuGet包  nuget中...

    Kestrel框架的使用demo

    **Kestrel框架详解** Kestrel框架是ASP.NET Core的一部分,它是一个高度可配置、高性能的Web服务器,被设计用于构建跨平台的现代Web应用。Kestrel自.NET Core 1.0版本起就已成为默认的Web服务器,支持Windows、...

    Python库 | kestrel-lang-1.0.5.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:kestrel-lang-1.0.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    addlog-kestrel

    addlog-kestrel

    kestrel.node:Node.js 的 Kestrel 客户端

    红隼节点Node.js 的 Kestrel 客户端安装 npm install kestrel.node用法 var Kestrel = require ( 'kestrel.node' ) ;var client = new Kestrel ( 'localhost:22133' ) ;// get can optionally take a timeout in ...

    web服务器KestrelHttpServer.zip

    Kestrel以其灵活性和可靠性而著称,被广泛用于ASP.NET Core应用程序的部署。 **一、KestrelHttpServer与libuv的关系** libuv是一个跨平台的异步I/O库,它为多种操作系统提供了统一的API,用于处理网络连接和文件...

    Kestrel:Kestrel是在I386上运行的实验内核-开源

    Kestrel是不是Unix或Windows的内核。

    ASP.NET Core 因为 Nginx 配置 Connection 为 Upgrade 导致 Kestrel 返回 400

    在某些情况下,当 Nginx 配置不当,尤其是 `Connection` 字段设置为 `Upgrade` 时,可能会导致 Kestrel(ASP.NET Core 的内置 web 服务器)返回 400 错误。这个问题通常与 WebSocket 协议升级有关。 WebSocket 是一...

    Kestrel封装成WindowServer.zip

    这篇文章主要是记录如何将Kestrel的服务封装在WindowService中 关于WindowsServer 请参考如下这篇文章 .netcore worker service (辅助角色服务) 的上手入门,包含linux和windows服务部署 开发服务 之前做过.net5...

Global site tag (gtag.js) - Google Analytics