使用 Redis 的 Mule 缓存策略

2023-11-21

我正在寻找一种在两台服务器之间共享缓存的方法,并且正在研究使用 Redis 作为对象存储缓存策略,但在读取存储值时遇到问题。

当缓存命中为未命中值时,它会成功存储值,但在检索该值时会抛出错误。

所需的对象/属性“muleContext”为 null

据猜测,对象存储缓存策略可能需要一个实现 MuleContextAware 接口的对象存储。

有谁知道这是否正确或如何解决这个问题?

这是示例流程

    <mule xmlns:redis="http://www.mulesoft.org/schema/mule/redis" xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
    xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/redis http://www.mulesoft.org/schema/mule/redis/3.4/mule-redis.xsd">


    <redis:config name="Redis" doc:name="Redis" defaultPartitionName="test" />
    <ee:object-store-caching-strategy name="Redis_Caching_Strategy" doc:name="Caching Strategy">
        <spring-object-store ref="Redis" />
    </ee:object-store-caching-strategy>

    <flow name="htmlCacheRedisFlow" doc:name="htmlCacheRedisFlow">
        <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8084" path="cacheRedis" doc:name="HTTP"/>
        <expression-transformer expression="#[payload.substring(payload.lastIndexOf('/') + 1)]" doc:name="Expression"/>
        <ee:cache doc:name="Cache" cachingStrategy-ref="Redis_Caching_Strategy" >
            <logger message="getting item from db for key #[payload]" level="INFO" doc:name="Logger"/>
            <expression-transformer expression="#[payload + 'asd']" doc:name="Expression"/>
        </ee:cache>
    </flow> 
</mule>

正如 David 已经指出的那样,在问题评论中,EE 缓存范围在社区版中不可用。然而,有一些方法可以在社区版中实现缓存。

博客文章使用 Mule ESB 社区版进行企业缓存展示了如何通过添加自定义拦截器来做到这一点。该博客文章使用 ehcache,但您可以修改此示例以使用 Redis。

这篇博文简而言之就是:

<custom-interceptor doc:name="PayloadCache"   
     class="se.redpill.mulecomponents.cache.PayloadCache">  
   <spring:property name="cache" ref="MyCache"/>  
</custom-interceptor>

和 PayloadCache.java

package se.redpill.mulecomponents.cache;  
import net.sf.ehcache.Ehcache;  
import net.sf.ehcache.Element;  
import org.mule.DefaultMuleEvent;  
import org.mule.DefaultMuleMessage;  
import org.mule.api.MuleEvent;  
import org.mule.api.MuleException;  
import org.mule.api.MuleMessage;  
import org.mule.api.interceptor.Interceptor;  
import org.mule.api.processor.MessageProcessor;  
/**  
 * A mule interceptor acting as a ehCache component.  
 * Based on the Cache interceptor blueprint from Mule In Action by David Dossot and John D'Emic,  
 *   
 */  
public class PayloadCache implements Interceptor   
{       
       private MessageProcessor next;  
       private Ehcache cache;  
       public void setListener(MessageProcessor listener)  
       {  
         next = listener;  
       }  
       public void setCache(final Ehcache cache)  
       {  
         this.cache = cache;  
       }  
       public MuleEvent process(MuleEvent event) throws MuleException  
       {  
         final MuleMessage currentMessage = event.getMessage();  
         final Object key = currentMessage.getPayload();  
         final Element cachedElement = cache.get(key);  
         if (cachedElement != null)  
         {  
           return new DefaultMuleEvent(new DefaultMuleMessage(cachedElement.getObjectValue(),  
             currentMessage, event.getMuleContext()), event);  
         }  
         final MuleEvent result = next.process(event);  
         cache.put(new Element(key, result.getMessage().getPayload()));  
         return result;  
       }  
}  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Redis 的 Mule 缓存策略 的相关文章

  • 如何在 Mule 4 中将 SQL Server SELECT 转换为 XML?

    如何使用 Mule 4 中的 Dataweave 将以下 SQL 输出转换为 XML SELECT s RefId s LocalId s StateProvinceId s SchoolName e Email e EmailType F
  • 如何在 Mule ESB 中将 json 转换为 json 文档

    我有一个带有接收 json 文档的 HTTP 端点的流程 这应该转换成其他 json 文档 json to json conversion 在 mule ESB 中 不使用 XSLT 来执行此操作的最佳实践是什么 他们可以分享一些例子 感谢
  • 无法在 mule 中创建动态文件入站端点

    我得到一个文件路径作为 xml 内 mule 的输入 使用 XPATH 表达式 我能够提取路径 我想从该路径读取特定文件 我尝试如下定义文件入站端点 但它似乎不起作用
  • 重连策略适用于哪些 mule 传输

    The 重连策略文档仅使用 JMS 示例 但是FTP 传输文档确实说明了重新连接策略的使用 但没有任何细节或示例 进一步如果你看这个answer David 提到重新连接仅适用于某些传输 连接传输 所以我的第一个问题 我们是否可以有一些正式
  • 如何使用 MUnit 在 Mule Flow 中模拟 Java 组件

    我正在尝试使用 MUnit 对我的一个子流程进行单元测试 我需要模拟一个自定义 Java 组件 但我无法这样做 我的子流程如下
  • docker 中没有暴露和发布端口的连接

    我有一些中间件在 Docker 容器中运行 当我运行这个中间件时在我的主机上一切正常 当我在docker装有所有必要物品的容器暴露和发布的端口 Dockerfile EXPOSE 5672 15672 1337 1338 5556 3000
  • 在 Mule Flows 中使用 SOAP 配置 HTTP 端点

    我正在尝试使用 Mule Flows 在 Mule 中配置现有的 SOAP Web 服务 我有一个带有请求 响应的 HTTP 端点和一个 SOAP 组件 例如服务 A I want to configure this setup for a
  • 我需要帮助使用 dataweave 以 xml 格式输出“大于”和“小于”字符

    我有以下数据编织代码 dw 2 0 output xml writeDeclaration false a b lt 当前输出是
  • 如何在骡子中手动抛出肥皂故障

    我面临着一种情况 我们无法使用模式来验证传入的请求 基本上模式就在那里 但它接受请求中的任何字符串 wsdl 设计者有自己的理由这样做 以接受来自不同来源和灵活性的请求 但是 当收到请求时 我会验证请求包装器的子元素是否是我们所期望的 为此
  • 如何向 Mule 有效负载添加附加数据?

    我正在尝试将一些额外的静态数据添加到入站 http 消息 作为 URL 参数接收 有效负载 然后将其提交到基于出站 http 表单的端点 我的骡子配置如下
  • ESB MULE 将参数传递给 java 方法

    我使用MULE版本3 3 0 CE 我想从入站标头获取一些值 然后将其传递给java方法 在java方法中对传递的值进行一些更改 最后我再次将其从java方法传递到出站 而不是将 Java bean 绑定到 Mule API 使用Calla
  • 将 War 部署到 Mule 独立服务器中

    我有一个 mule 独立服务器 其中包含我正在开发的应用程序 该应用程序使用的许多服务将来将从 Mule 容器移至 JBoss 集群中 因此 我在 Mule 流和 Web 服务之间保持了严格的分离 然而 截至目前 我需要将 War 文件部署
  • 如何在Mule中创建独占队列消费者?

    在 ActiveMQ 中 您可以为队列配置独占消费者 例如 Queue Name Here consumer exclusive true 如何在 Mule 中配置像上面这样的独占消费者 您需要对队列名称进行 URL 编码 因为 Mule
  • 如何使用 Groovy 从 Oracle 获取游标?

    我正在使用一个Groovy脚本在Mule ESB从中获取输出参数Oracle存储过程 包括游标 并出现异常 最小的例子 import groovy sql Sql import oracle jdbc pool OracleDataSour
  • 配置 Mule JPA 模块以使用 Eclipse Link 和 MySQL

    我正在尝试编写一个 Mule ESB 应用程序 它将 XML 文件读入域对象 然后使用 JPA 将该对象写入 MySQL 数据库 我已经弄清楚了大部分所需的配置 但我遇到了一个问题 其中 Mule JPA 模块 https github c
  • 数据编织转换

    我有 POST 方法的以下有效负载的输入 order Column X X Column Y Y Column Z Z Column W div 1 some text div 2 true div 3 2 mapper A
  • 如何使用 Talend Open Studio Data Integration 创建属性文件?

    我曾经使用 Talend Open Integration studio 创建作业并从 IDE 运行它或将其导出为可执行 jar 文件 但我并没有广泛使用它 是否可以创建一个包含不同服务器名称和其他变量的外部配置文件 以便在创建 Talen
  • 如何让 Mule 从 JDBC 查询中作为单个事务返回多行?

    如果 Oracle 表中有 100 行 我希望收到一封正文有 100 行的电子邮件 但我收到了 100 封电子邮件 每行一封 我认为 transactionPerMessage 会做到这一点 工具提示说 如果false 整个结果集将有一个事
  • Mule/码头设置

    我有一个正在运行的 Mule 应用程序 我想在其上设置 Jetty 来响应 http 请求 以下配置
  • 将原始文件名传送到 FTP 端点

    使用 Mule Studio 版本 3 5 0 版本号 201402101410 我有一个非常简单的流程 我需要从一台 ftp 服务器获取文件并将其传输到另一台 ftp 服务器 当文件写入目标时 文件名看起来像某种 UUId 而不是原始文件

随机推荐

  • 为什么Matlab和Octave中inv()和pinv()的输出不相等?

    我注意到如果 A 是一个 NxN 矩阵并且它有逆矩阵 但是 inv 和 pinv 函数输出的内容是不同的 我的环境是Win7x64 SP1 Matlab R2012a Cygwin Octave 3 6 4 FreeMat 4 2 看看 O
  • 向 requestAnimationFrame 回调的函数添加额外的参数

    我希望创建一个函数 使用 requestAnimationFrame 和增量时间在 HTML5 画布上将图像元素滚动 x 像素超过 y 时间 我不知道的是 当 requestAnimationFrame allready 使用一个参数 DO
  • 上下文中的多个包:组件扫描、spring config

    如何在 spring servlet xml 文件中添加多个包context component scan元素 我努力了
  • 如何使用 TensorFlow 2.0 打乱两个 numpy 数据集?

    我想写一个函数TensorFlow 2 0比在每次训练迭代之前对数据及其目标标签进行打乱 假设我有两个 numpy 数据集 X 和 y 代表用于分类的数据和标签 我怎样才能洗牌同时 Using sklearn这很简单 from sklear
  • 扩展 Android 的语音搜索应用

    是否可以扩展语音搜索应用程序 我知道我可以在自己的应用程序中添加一个按钮来启动语音识别对话框 但我想知道是否可以扩展当您长按物理 搜索 键时自动启动的语音搜索应用程序 send text to contact message listen
  • 关于 Vue 3 + TypeScript 和 Augmenting-Types-for-Use-with-Plugins 的问题

    有谁知道如何使用 Vue3 和 TypeScript 实现类型增强的工作示例 我一直在尝试遵循 Vue2 文档 在 Vue3 中使用相同的内容 但没有成功 并且在过去 3 个小时的搜索中没有任何结果 看来Vue对象在vue class co
  • 检查矩阵行是否等于 R 中的矢量(矢量化)

    我很惊讶这个问题没有被问到 也许答案会澄清原因 我想将矩阵的行与向量进行比较 并返回该行是否 处处的向量 请参阅下面的示例 我想要一个矢量化解决方案 没有应用函数 因为矩阵太大而无法缓慢循环 假设也有很多行 所以我想避免重复向量 set s
  • 将 Microsoft SQL 复制到其他数据库

    我希望能够将整个数据库从 Microsoft SQL 复制到另一个 Web 友好的数据库 例如 CouchDB 甚至 mySQL 我需要每天进行复制 只是想知道是否可能 如果可以 我将如何用最少的编码来完成它 Thanks 这是可能的对称D
  • 在网页上查找广告

    我正在编写一个应用程序 试图确定页面上是否有广告 当前正在使用 python 通过 selenium webdriver 使用浏览器驱动 我认为 iframe 内存在大量广告 并且我制作了一个循环来查看每个框架的内部 browser web
  • AngularJS 中用于分页的限制和偏移数据结果

    AngularJS在调用支持Limit和Offset的外部数据资源时是否有Limit和Offset请求方法 我想有一个比这更优雅的解决方案 我通过路线参数传递限制和偏移量 function ListCtrl scope http route
  • ExecCommand 函数的定义是否为粗体?

    ExecCommand 提供了一种在 iFrame 中将文本加粗 斜体 下划线等的方法 但它缺少创建选项
  • Flask WTF“StringField”对象没有属性“translate”

    我对 Python 比较陌生 并且一直在关注Miguel Grinberg Flask 超级教程 我有一个非常简单的表单 当我尝试提交时 我收到以下错误 AttributeError StringField 对象没有属性 translate
  • Postgresql join_collapse_limit 和查询规划的时间

    我刚刚发现join collapse limit一直在阻止 PostgreSQL 规划器找到更好的连接顺序 就我而言 将限制增加到 10 默认为 8 允许规划器将搜索时间从约 30 秒缩短到约 1 毫秒 这是更容易接受的 该文档表明 设置此
  • 如何使用 Electron 运行和打包外部可执行文件?

    例如 我有一个编译好的二进制文件cudaDeviceQuery它以 JSON 形式返回设备列表 这是一段代码 export default function cudaDeviceQuery Promise
  • Laravel 对所有页面进行身份验证检查

    我已经创建了身份验证 并且它运行良好 但检查内页时存在一些问题 例如 Route get array before gt auth do gt function return View make home index 索引页面仅对登录用户可
  • 从手机号码中提取国家代码

    我有一个带有国家 地区代码的手机号码列表 例如 919638095998 号码 我已经提到了libphonenumber 谷歌示例另外 首先我们需要传递国家 地区 2 位数代码 我最初不知道 那么我怎么知道这个号码来自哪个国家呢 我还得到了
  • CouchDB读取授权

    在couchdb网站 gt 技术概述 gt 安全性和验证 http couchdb apache org docs overview html 它写道 在读者访问 部分 为了保护文档内容 CouchDB文档可以有一个读者列表 这是允许阅读文
  • Angular ui-router 完成条件视图

    我正在问一个与这个问题类似的问题 UI 路由器条件 ui 视图 但我的情况有点复杂 我似乎无法得到所提供的工作答案 基本上 我有一个 url 可以用两种截然不同的方式呈现 具体取决于 url 指向的实体类型 这是我目前正在尝试的 state
  • 鼠标中键按下并移动事件

    是什么控制事件鼠标中键按下并移动 也就是说 当我按住鼠标中键并移动鼠标时 我可以订阅什么事件 看一下 Control MouseDown 事件 鼠标按钮枚举 在 C 中检测鼠标按钮事件 你也可以尝试这样的事情 private void Fo
  • 使用 Redis 的 Mule 缓存策略

    我正在寻找一种在两台服务器之间共享缓存的方法 并且正在研究使用 Redis 作为对象存储缓存策略 但在读取存储值时遇到问题 当缓存命中为未命中值时 它会成功存储值 但在检索该值时会抛出错误 所需的对象 属性 muleContext 为 nu