资讯详情

华为云OBS创建对象时以HTTP方式通知订阅终端

谈谈商业场景。工厂摄像头实时监控相关生产过程,通过图像识别技术将图片和问题信息上传到华为云OBS服务中。并实时获取客户端OBS新数据,处理并发起相关整改流程,通知相关负责人等。

实时获取客户端OBS由于无法知道问题图片和信息何时上传到新数据中OBS,最初的想法是通过调整定时任务的合理触发频率来获取数据。这样有两个问题。一是除非触发频率调整到很高,否则不可能真正实时;第二,在没有新数据的情况下,定期空跑会浪费资源。

阅读了华为云OBS在开发指南中的事件通知章节中,经研究确实可行,认为应该有更好的方法来实现上述需求。开通华为云账户并购买ECS弹性云服务器,SMN和OBS服务,直接步骤。

1.根据需要创建桶

1.1 选区域,搜索OBS

1.2 创建桶

留意桶名称和Endpoint,使用代码。

2、设置SMN

2.1 创建主题

创建主题选择的区域需要和OBS相同的区域。

2.2 设置主题策略

可发布消息的服务勾选OBS。

2.3添加订阅

终端地址IP或者域名必须在公网上访问。

刚刚添加的订阅处于未确认状态。

3.准备订阅终端(微服务)

微服务测试接口代码如下:

@RequestMapping("/smntest")     public void smnTest(HttpServletRequest request, @RequestBody Map<String, Object> paramMap) {         System.out.println("smn请求进来了!!!!");          System.out.println("header如下:");         Enumeration<String> headers = request.getHeaderNames();          while (headers.hasMoreElements()) {             String s = headers.nextElement();             System.out.println( s   ":"   request.getHeader(s));         }          System.out.println("参数如下:");         System.out.println(paramMap.toString());     }

将服务部署到公服务器中部署服务。

4、确认订阅

4.1 发送确认订阅请求

在新闻通知服务的订阅菜单中,定3.2中添加的订阅终端,点击请求订阅。

4.2 确认订阅

部署的测试服务将被要求订阅。

在参数中subscribe_url将参数值复制到浏览器的地址栏中,返回车辆。

刷新订阅主题界面,发现订阅状态已更新。

5、编写DEMO

写一个demo向OBS桶内创建对象,触发消息通知,SMN消息服务向订阅终端发送消息http新闻触发了相应的业务逻辑。

5.1 获取ak/sk

密钥创建后只能下载一次。

5.2 OBS在桶里创建对象

public static void main(String[] args) throws IOException, ClassNotFoundException {         ObsClient obsClient = new ObsClient(ak, sk, endP);          BucketNotificationConfiguration bnc = new BucketNotificationConfiguration();         TopicConfiguration tc = new TopicConfiguration();         //设置配置id         tc.setId("test-create");         //设置主题RUN         tc.setTopic("urn:smn:cn-southwest-2:81670b4b98134c338810a791c8fad9f8:OBS-NOTIFICATION-TEST");         //设置触发事件-put对象时触发         tc.getEventTypes().add(EventTypeEnum.OBJECT_CREATED_PUT);          bnc.addTopicConfiguration(tc);         obsClient.setBucketNotification(bucketN, bnc);         //向桶里put一个对象         createObj(obsClient);     }

createObj(obsClient):

//添加对象     public static void createObj(ObsClient obsClient) {         PersonVO personVO = new PersonVO("张三", "南宁");         obsClient.putObject(bucketN, "XiaoZhang", new ByteArrayInputStream(personVO.toString().getBytes(StandardCharsets.UTF_8)));     }

6、运行main(..)方法

可以看到putObject事件成功触发SMN向订阅终端发送信息。订阅终端收到的数据包括新对象所在的桶名和对象名。

OBS里新创建的对象:

可以根据桶名和对象名下载对象。

标签: 韩国cas传感器型号smn

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台