当前位置: 首页 > news >正文

全景网站制作教程排名优化seo公司

全景网站制作教程,排名优化seo公司,京东的网站规划与建设,网站群建设意义背景 在处理键值分区状态时,使用ttl设置过期时间是我们经常使用的,但是任何代码的修改都需要首先进行单元测试,本文就使用单元测试来验证一下状态ttl的设置是否正确 测试状态ttl超时的单元测试 首先看一下处理函数: // 处理函…

背景

在处理键值分区状态时,使用ttl设置过期时间是我们经常使用的,但是任何代码的修改都需要首先进行单元测试,本文就使用单元测试来验证一下状态ttl的设置是否正确

测试状态ttl超时的单元测试

首先看一下处理函数:

// 处理函数
public class MyStateProcessFunction extends KeyedProcessFunction<String, String, String> {// 键值分区状态ValueState<String> previousInput;@Overridepublic void open(Configuration parameters) throws Exception {ValueStateDescriptor stateDescriptor = new ValueStateDescriptor<String>("previousInput", Types.STRING);// 状态ttl超时时间设置StateTtlConfig ttlConfig =StateTtlConfig.newBuilder(Time.minutes(1)).setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite).setStateVisibility(StateTtlConfig.StateVisibility.NeverReturnExpired)// check 10 keys for every state access.cleanupIncrementally(10, false).build();stateDescriptor.enableTimeToLive(ttlConfig);previousInput = getRuntimeContext().getState(stateDescriptor);}@Overridepublic void processElement(String in, Context context, Collector<String> collector) throws Exception {context.timerService().registerProcessingTimeTimer(100);String out = (Objects.nonNull(previousInput.value()) ? previousInput.value() : "") + in;collector.collect(out);if (!in.contains("NotUpdate")) {// 为了模仿有访问状态,但是不更新状态,正常情况下业务逻辑是访问其他key组的其它state,而一直没有访问的key的状态会在超时时间到之后被清理掉previousInput.update(in);}}@Overridepublic void onTimer(long timestamp, OnTimerContext ctx, Collector<String> out) throws Exception {if (Objects.nonNull(previousInput.value())) {out.collect(String.format("timer trigger %s", previousInput.value()));} else {out.collect(String.format("timer trigger state clear", previousInput.value()));}}}

单元测试代码:

/*** 测试状态处理函数,包含状态的ttl配置,以及ontimer方法**/
@Test
public void testKeyedStateProcessFunction() throws Exception {MyStateProcessFunction myStateProcessFunction = new MyStateProcessFunction();OneInputStreamOperatorTestHarness<String, String> testHarness =ProcessFunctionTestHarnesses.forKeyedProcessFunction(myStateProcessFunction, x -> "1", Types.STRING);testHarness.open();testHarness.processElement("hello", 10);// 注册了一个定时器,定时器100后过期Assert.assertEquals(1, testHarness.numProcessingTimeTimers());// 测试输出Assert.assertEquals(Lists.newArrayList("hello"), testHarness.extractOutputValues());ValueState<String> previousInput = myStateProcessFunction.getRuntimeContext().getState(new ValueStateDescriptor<>("previousInput", Types.STRING));// 查看下状态应该已经被设置Assert.assertEquals("hello", previousInput.value());testHarness.processElement("world", 10);// 再次测试输出Assert.assertEquals(Lists.newArrayList("hello", "helloworld"), testHarness.extractOutputValues());// 再次查看下状态应该已经被设置Assert.assertEquals("world", previousInput.value());// 设置时间为1分钟,让状态超时testHarness.setStateTtlProcessingTime(Time.minutes(1).toMilliseconds());// 触发下状态访问,这样flink就会清理,正常生产中不需要这一步,访问状态本来就一直在进行中,只是可能是其他key分组的状态testHarness.processElement("NotUpdate1", System.currentTimeMillis());// 查看下状态应该已经被清理Assert.assertNull(previousInput.value());// 设置让定时器过期,顺带确认下状态已经被清理testHarness.setProcessingTime(100);// 测试输出(包含两个输入+一个定时器的输出)Assert.assertEquals(Lists.newArrayList("hello", "helloworld", "NotUpdate1", "timer trigger state clear"),testHarness.extractOutputValues());testHarness.close();
}

测试代码中已经包含了详细的注解,我们实现自己的ttl单元测试时可以参考下

http://www.dinnco.com/news/83876.html

相关文章:

  • 福建个人网站备案注册城乡规划师报考条件
  • 帮客户做网站的公司新东方雅思培训价目表
  • 网站建设可以学吗seo独立站
  • 收废品做网站网络营销的概念是什么
  • 东莞网站建设营销服务平台晚上免费b站软件
  • 找外包做网站什么是搜索引擎营销?
  • 江西南昌网站定制沈阳专业seo关键词优化
  • 疫情最新数据消息甘肃网站关键词排名怎么优化
  • 建设工程竞标网站seo研究中心超逸seo
  • 给别人做时时彩网站违法不b2b商务平台
  • 网上购物网站开发的背景哪家公司网站做得好
  • 一品威客做任务要给网站钱吗网络营销方案总结
  • wordpress管理密码网站怎么优化排名的方法
  • 服装商城网站建设网络营销工作内容和职责
  • 沈阳网站设计定制娄底seo
  • 网站流量 名词网站交易
  • 有没有帮忙做网站的网站关键字排名优化
  • 自动化营销网站建设网站定制开发
  • 先做网站再备案吗近期热点新闻
  • 查公司的口碑和评价的网站网站推广软件免费版
  • 用WordPress做网站入门课新闻热点事件2024最新
  • 网站布局介绍怎么制作网页推广
  • 网页设计标签大全优化seo报价
  • 招聘信息网站开发背景搜索引擎优化
  • 开发公司制作铁艺围栏在什么科目列支如何优化关键词排名快速首页
  • 南宁seo网站建设费用网络营销服务公司
  • 好网站范例如何在百度上推广自己
  • 上海建设网站网站关键词收录查询
  • 易语言做试用点击网站优化网站关键词的技巧
  • 可做免费推广产品的网站有哪些百度网盘优化