使用regular expression extractor搭配线程间通信后置处理器如何避免存储空值
解决方法如下:
前置配置:先给正则表达式提取器设置识别标识
给你用来提取Emp-ID的正则表达式提取器配置默认值:在「Default Value」输入框填写自定义的无效值标识,比如EMP_ID_NOT_FOUND。这样请求失败、正则提取不到有效值时,${Emp-ID}的变量值就会固定为这个标识,方便后续逻辑判断。
方案1:通过条件表达式控制线程间通信后置处理器执行(无需写代码)
选中你当前使用的线程间通信后置处理器,在右侧配置面板的「高级」标签下,找到「仅在表达式为真时执行」(Execute only if expression is true)输入框,填入如下表达式:${__jexl3("${Emp-ID}" != "EMP_ID_NOT_FOUND",)}
配置完成后,只有当Emp-ID提取到有效值、不等于你设置的无效标识时,后置处理器才会执行写入队列的操作,提取失败的场景会直接跳过,不会存入无效值。
方案2:通过JSR223后置处理器自定义写入逻辑(灵活度更高)
如果后续还有其他自定义判断需求,可以用JSR223后置处理器实现队列写入逻辑:
- 删掉原本直接绑定在请求下的线程间通信后置处理器
- 新增JSR223后置处理器,语言选择Groovy(性能最优),写入如下代码:
// 提取Emp-ID变量值 def empId = vars.get("Emp-ID") // 仅当值不为无效标识时写入队列 if (empId != "EMP_ID_NOT_FOUND") { // 替换为你实际使用的队列名称 def queueName = "你配置的队列名称" def queue = ctx.getVariables().getObject("__interThreadCommunication_queue_" + queueName) queue.put(empId) }
注意:请确保你所有配置里的变量名一致,避免把
Emp-ID错写为EmpID导致的取值异常。
内容的提问来源于stack exchange,提问作者JessieB
相关产品推荐
相关产品推荐

