阿帕奇骆驼遇见Redis

键值商店的兰博基尼

Camel是最好的面包集成框架,在本文中,我将向您展示如何通过利用另一个出色的项目Redis使它更加强大。

Camel 2.11即将发布,具有许多新功能,错误修复和组件。 这些新组件中的几个是我创作的, redis-component是我最喜欢的组件 。 Redis – ligth键/值存储区是一款出色的意大利软件,专为提高速度而设计(与Lamborghini相同– Lamborghini –这是一款两人座的意大利汽车,专为 速度)。 Redis用C语言编写,并且具有接近金属的内存,Redis的表现非常出色(Lamborgini的座右铭是“ Closer to the Road”)。 Redis通常被称为数据结构服务器,因为键可以包含字符串,哈希,列表和排序集。 快速,轻便的数据结构服务器对于软件工程师来说就像是一辆超级跑车,它只是飞行而已。 如果您想了解有关Redis和兰博基尼独特性能特征的更多信息,可以在Google周围找到自己。

Redis入门很容易:下载,制作和启动Redis服务器。 完成这些步骤之后,您就可以从Camel应用程序中使用它了。 该组件在内部使用Spring Data ,该数据又使用Jedis驱动程序,但有可能切换到其他Redis驱动程序。 以下是一些适合使用camel-redis组件的用例:

幂等存储库

幂等一词在数学中用于描述一个函数,如果将其应用到其自身上,将产生相同的结果。 在“消息传递”中,无论是一次还是多次接收,此概念都将转换为具有相同效果的消息。 在Camel中,此模式是使用IdempotentConsumer类实现的,该类使用一个Expression计算给定消息交换的唯一消息ID字符串。 然后可以在IdempotentRepository中查找此ID,以查看是否以前已看到过该ID; 如果消息已消耗; 如果不是,则处理该消息并将ID添加到存储库。 RedisIdempotentRepository使用集合结构来存储和检查现有ID。

<bean id="idempotentRepository" class="org.apache.camel.component.redis.processor.idempotent.RedisIdempotentRepository">
<constructor-arg value="test-repo"/>
</bean><route>
<from uri="direct:start"/>
<idempotentConsumer messageIdRepositoryRef="idempotentRepository">
<simple>${in.body.id}</simple>
<to uri="mock:result"/>
</idempotentConsumer>
</route>

快取

Redis的主要用途之一是作为LRU缓存 。 它可以将内存中的数据存储为Memcached,或者可以调整为持久刷新数据到日志文件,如果节点重新启动则可以重播。达到maxmemory时可以使用多种策略来创建满足特定需求的缓存:

  • volatile-lru删除具有过期集的密钥中的一个,以尝试删除最近未使用的密钥。
  • volatile-ttl删除具有过期集的密钥,并尝试删除剩余生存时间短的密钥。
  • volatile-random从具有到期集的密钥中删除一个随机密钥。
  • allkeys-lru类似于volatile-lru,但是将删除每种密钥,包括普通密钥或具有过期集的密钥。
  • allkeys-random和volatile-random一样,但是将删除所有类型的键,包括普通键和具有过期集的键。

一旦您的Redis服务器配置了正确的策略并正在运行,您需要执行的操作是SET和GET:

<?xml version="1.0" encoding="UTF-8"?>
<route>
<from uri="direct:start"/>
<setHeader headerName="CamelRedis.Command">
<constant>SET</constant>
</setHeader>
<setHeader headerName="CamelRedis.Key">
<constant>keyOne</constant>
</setHeader>
<setHeader headerName="CamelRedis.Value">
<constant>valueOne</constant>
</setHeader>
<to uri="redis://localhost:6379"/>
</route>

与Redis的Interap发布/订阅

骆驼具有在路线之间进行交互的各种组件:

direct :在同一骆驼上下文中提供直接,同步的调用。
seda :异步行为,再次在同一骆驼上下文中在BlockingQueue上交换消息。
vm :类似于seda的异步行为,但只要它们在同一个JVM中,它还支持跨CamelContext的通信。 复杂的应用程序通常包括在单独的计算机上运行的多个独立的Camel实例。 对于这种情况,Camel提供了jms,activemq以及AWS SNS与SQS的组合,用于实例之间的消息传递。 Redis为发布/订阅消息范式提供了一个更简单的解决方案。 订阅者通过指定频道名称或使用模式匹配从多个频道接收消息来订阅一个或多个频道。 然后,发布者将消息发布到频道,然后Redis确保它到达所有匹配的订阅者。

<?xml version="1.0" encoding="UTF-8"?>
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route startupOrder="1">
<from uri="redis://localhost:6379?command=SUBSCRIBE&channels=testChannel"/>
<to uri="mock:result"/>
</route><route startupOrder="2">
<from uri="direct:start"/>
<setHeader headerName="CamelRedis.Command">
<constant>PUBLISH</constant>
</setHeader>
<setHeader headerName="CamelRedis.CHANNEL">
<constant>testChannel</constant>
</setHeader>
<setHeader headerName="CamelRedis.MESSAGE">
<constant>Test Message</constant>
</setHeader>
<to uri="redis://localhost:6379"/>
</route>
</camelContext>

其他用法

保证的交付 :骆驼使用JMS,File,JPA和一些其他组件来支持此EIP。 Redis可以通过其事务支持用作轻量级键值持久存储。

通过EIP模式中的“ 声明检查” ,您可以用声明检查(唯一密钥)替换消息内容,该声明检查可在以后用于检索消息内容。 消息内容可以临时存储在Redis中。

Redis在实现计数器,排行榜,标签系统和更多功能方面也非常受欢迎。 现在,有了两把瑞士军刀,您所做的整合仅受您的想象力限制。

参考: Apache Camel在OFBIZian博客上会见了我们的JCG合作伙伴 Bilgin Ibryam的Redis 。

翻译自: https://www.javacodegeeks.com/2013/03/apache-camel-meets-redis.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML 教程- (HTML5 标准)摘抄笔记

HTML 教程- (HTML5 标准) 教程网址&#xff1a;http://www.runoob.com/html/html-tutorial.html http://blog.csdn.net/ljfbest/article/details/6700148 HTML版本 从初期的网络诞生后&#xff0c;已经出现了许多HTML版本: 版本发布时间HTML1991HTML 1993HTML 2.01995HTML 3…

Java EE CDI ConversationScoped示例

在本教程中&#xff0c;我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean。 在CDI中&#xff0c;bean是定义应用程序状态和/或逻辑的上下文对象的源。 如果容器可以根据CDI规范中定义的生命周期上下文模型来管理其实例的生命周期&#xff0c;则Java EE组件…

Git 中文教程

以下内容转载自&#xff1a;http://www.open-open.com/lib/view/open1328928294702.html Git是一个分布式的版本控制工具&#xff0c;本篇文章从介绍Git开始&#xff0c;重点 在于介绍Git的基本命令和使用技巧&#xff0c;让你尝试使用Git的同时&#xff0c;体验到原来一个版本…

php markdown的转化函数,markdown公式转为知乎格式

在知乎中写技术类文章&#xff0c;经常会用到markdown知乎文章可以导入markdown格式&#xff0c;但是不支持Latex公式。知乎大神提供了替代方案&#xff1a; https://zhuanlan.zhihu.com/p/69142198为实现自动化&#xff0c;用python将其简易实现&#xff0c;代码如下&#xff…

Java EE CDI Producer方法教程

这是CDI Producer方法的教程。 在CDI中&#xff0c;生产者方法生成一个可以注入的对象。 当我们要注入本身不是bean的对象&#xff0c;要注入的对象的具体类型在运行时可能有所不同&#xff0c;或者当对象需要一些bean构造函数不执行的自定义初始化时&#xff0c;可以使用生产者…

牛客网Java刷题知识点之方法覆盖(方法重写)和方法重载的区别

不多说&#xff0c;直接上干货&#xff01; https://www.nowcoder.com/ta/review-java/review?query&asctrue&order&page6 方法重写的原则&#xff1a; 重写方法的方法名称、参数列表必须与原方法的相同&#xff0c;返回类型可以相同也可以是原类型的子类型(从Jav…

AngularJS的ng-repeat显示属性名和属性值

代码下载&#xff1a;https://files.cnblogs.com/files/xiandedanteng/AngularJSAuthorRepeat.rar 代码&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html ng-app&qu…

2018.2.28(延迟加载和缓存)

1.延迟加载 编写配置 测试类 2.侵入式延迟 3.深度延迟 4.一级缓存 5.二级缓存 配置 测试类 转载于:https://www.cnblogs.com/xu06123/p/8483245.html

小爬麦子学院教师

任务描述&#xff1a;将麦子学院指定网页下教师信息&#xff08;姓名&#xff0c;职称&#xff0c;介绍信息&#xff09;爬取下来并保存到数据库。 1.页面分析&#xff1a; 2.代码&#xff1a; mydb.py: #!/usr/bin/env/python #coding:utf-8 操作数据库import MySQLdb as dbcl…

[HNOI2015] 落忆枫音

题目描述 「恒逸&#xff0c;你相信灵魂的存在吗&#xff1f;」 郭恒逸和姚枫茜漫步在枫音乡的街道上。望着漫天飞舞的红枫&#xff0c;枫茜突然问出这样一个问题。 「相信吧。不然我们是什么&#xff0c;一团肉吗&#xff1f;要不是有灵魂......我们也不可能再见到你姐姐吧。」…

Java中的模板方法设计模式

模板方法模式是一种行为设计模式&#xff0c;它为算法提供了基础方法&#xff0c;称为模板方法&#xff0c;该方法将其某些步骤推迟到子类中&#xff0c;因此算法结构相同&#xff0c;但某些步骤可以由子类根据上下文重新定义。 模板是指预设格式&#xff0c;例如HTML模板&…

winform中的数据绑定

1. 简单的数据绑定 例1 using (SqlConnection conn new SqlConnection(ConfigurationManager.ConnectionStrings["connStr"].ToString())) { SqlDataAdapter sda new SqlDataAdapter("Select * From T_Class Where F_TypeProduct order by F_RootID,F_Order…

jQuery数据表和Java集成

jQuery DataTables是一个开放源代码插件&#xff0c;用于在浏览器中创建表。 它具有许多功能&#xff0c;例如排序&#xff0c;服务器端处理&#xff0c; JQUERY UI主题滚动。 该插件的下载链接&#xff1a; http://www.datatables.net/download/ 在本演示中&#xff0c;我…

CSS 属性 - 伪类和伪元素的区别

伪元素和伪类之所以这么容易混淆&#xff0c;是因为他们的效果类似而且写法相仿&#xff0c;但实际上 css3 为了区分两者&#xff0c;已经明确规定了伪类用一个冒号来表示&#xff0c;而伪元素则用两个冒号来表示。 :Pseudo-classes ::Pseudo-elements 但因为兼容性的问题&…

class-感知机Perception

1 感知机模型1.1 模型定义2 感知机学习策略2.1 数据的线性可分性2.2 学习策略3 学习算法3.1 算法原始形式3.2 收敛性3 学习算法的对偶形式1 感知机模型 感知机perceptron是二类分类问题的线性分类模型&#xff0c;输入为实例的特征向量&#xff0c;输出为实例的类别&#xff08…

Java中的方法调用有多昂贵

我们都去过那儿。 在查看设计不良的代码的同时&#xff0c;听听作者对人们永远不应该牺牲性能而不是设计的解释。 而且&#xff0c;您不能说服作者摆脱其500行方法&#xff0c;因为链接方法调用会破坏性能。 好吧&#xff0c;这可能在1996年左右是正确的。 但是自那时以来&…

1.HTML

HTML简介 hyper text markup language 即超文本标记语言。 超文本: 就是指页面内可以包含图片、链接&#xff0c;甚至音乐、程序等非文字元素。 标准模板 <!DOCTYPE html> <html lang"en"><head> <meta charset"U…

php记住表单数据cookie,【PHP基础】cookies和session

1.Cookiescookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时&#xff0c;它同时会发送 cookie。通过 PHP&#xff0c;您能够创建并取回 cookie 的值。1.1、如何创建 cookie&#xff1f;setcookie() 函数用于设置 cookie。…

C#调用Power Shell 管理Office365 执行脚本时遇到的问题

Power Shell管理Office参考http://www.mamicode.com/info-detail-494553.html C#调用Power Shell 参考 https://www.cnblogs.com/chenkai/archive/2010/11/09/1872471.html string pwd "**********";string userName "**********";StringBuilder ss new…

javaweb(三十七)——获得MySQL数据库自动生成的主键

测试脚本如下&#xff1a; 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码&#xff1a; 1 package me.gacl.demo;2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; …