在本文中,我将继续讲述在Oracle Digital Assistant和Oracle Digital Assistant的 基础上为FlexDeploy实现对话式UI的故事。
Fn项目 。 今天,我将围绕聊天机器人工作的无服务器API移到云中,因此整个解决方案都在云中工作:


该API是作为收集到Fn应用程序中的Fn函数集来实现的。 Fn的优点在于,它只是一堆Docker容器,它们可以同样在本地Docker引擎和云中某个位置的笔记本电脑上运行。 话虽如此,我可以从任何云提供商,因为它描述的运行K8S集群上我的FN应用在这里 。 但是今天不是那天。 今天,我将在基于Fn的全新云服务Oracle Functions上运行我的无服务器API。 该服务尚不通用,但是我参与了“有限可用性”计划,因此我可以对其进行试用,可以使用它并在其上发布博客。 在此解决方案中,我必须摆脱这里实现的Fn Flow ,并回到我原来的实现,因为Oracle Functions还不支持Fn Flow。 我希望很快,因为这实际上是最好的部分。

因此,配置好我们的OCI环境并启动并运行Oracle Functions服务(我不会在此处重新发布Oracle教程),我们需要配置Fn CLI以便能够与该服务通信:

fn create context oracle_fn --provider oracle
fn use context oracle_fn
fn update context oracle.compartment-id MY_COMPARTMENT_ID
fn update context api-url https://functions.us-phoenix-1.oraclecloud.com
fn update context registry phx.ocir.io/flexagonoraclecloud/flexagon-repo
fn update context oracle.profile oracle_fn

好的,现在我们的Fn命令行界面正在与Oracle Functions对话。 下一步是在Oracle Functions控制台中创建一个应用程序:


现在我们可以将Fn应用程序部署到Oracle Functions

Eugenes-MacBook-Pro-3:fn fedor$ ls -l
total 8
-rw-r--r--@ 1 fedor  staff   12 Dec  4 15:41 app.yaml
drwxr-xr-x  5 fedor  staff  160 Feb  9 15:24 createsnapshotfn
drwxr-xr-x  6 fedor  staff  192 Feb  9 15:25 receiveFromBotFn
drwxr-xr-x  6 fedor  staff  192 Feb  9 15:25 sendToBotFn
Eugenes-MacBook-Pro-3:fn fedor$
Eugenes-MacBook-Pro-3:fn fedor$
Eugenes-MacBook-Pro-3:fn fedor$ fn deploy --all

完成后,我们可以在Oracle Functions控制台中观察该应用程序:


下一步是更新聊天机器人和笔记本电脑中的API网址,以便调用云中的功能,而不是先前的本地实现。 可以使用以下命令检索URL:

fn list triggers odaapp

到目前为止,从我的笔记本电脑到Oracle Functions的迁移一直看起来非常简单。 但是这里有点痛苦。 为了使用http请求调用Oracle Functions中托管的函数 ,应该对请求进行签名,以便它们可以通过身份验证。 调用签名函数调用的node.js实现如下所示:

var fs = require('fs');
var https = require('https');
var os = require('os');
var httpSignature = require('http-signature');
var jsSHA = require("jssha");var tenancyId = "ocid1.tenancy.oc1..aaaaaaaayonz5yhpr4vxqpbdof5rn7x5pfrlgjwjycwxasf4dkexiq";
var authUserId = "ocid1.user.oc1..aaaaaaaava2e3wd3cu6lew2sktd6by5hnz3d7prpgjho4oambterba";
var keyFingerprint = "88:3e:71:bb:a5:ea:68:b7:56:fa:3e:5d:ea:45:60:10";
var privateKeyPath = "/Users/fedor/.oci/functions_open.pem";
var privateKey = fs.readFileSync(privateKeyPath, 'ascii');
var identityDomain = "identity.us-ashburn-1.oraclecloud.com";function sign(request, options) {var apiKeyId = options.tenancyId + "/" + options.userId + "/" + options.keyFingerprint;var headersToSign = ["host","date","(request-target)"];var methodsThatRequireExtraHeaders = ["POST", "PUT"];if(methodsThatRequireExtraHeaders.indexOf(request.method.toUpperCase()) !== -1) {options.body = options.body || "";var shaObj = new jsSHA("SHA-256", "TEXT");shaObj.update(options.body);request.setHeader("Content-Length", options.body.length);request.setHeader("x-content-sha256", shaObj.getHash('B64'));headersToSign = headersToSign.concat(["content-type","content-length","x-content-sha256"]);}httpSignature.sign(request, {key: options.privateKey,keyId: apiKeyId,headers: headersToSign});var newAuthHeaderValue = request.getHeader("Authorization").replace("Signature ", "Signature version=\"1\",");request.setHeader("Authorization", newAuthHeaderValue);
}function handleRequest(callback) {return function(response) {var responseBody = "";response.on('data', function(chunk) {responseBody += chunk;});response.on('end', function() {callback(JSON.parse(responseBody));});}
}function createSnapshot(release) {var body = release;var options = {host: 'af4qyj7yhva.us-phoenix-1.functions.oci.oraclecloud.com',path: '/t/createsnapshotfn',method: 'POST',headers: {"Content-Type": "application/text",}};var request = https.request(options, handleRequest(function(data) {console.log(data);}));sign(request, {body: body,privateKey: privateKey,keyFingerprint: keyFingerprint,tenancyId: tenancyId,userId: authUserId});request.end(body);
};

调用Oracle Functions中托管的无服务器API时, Oracle Digital Assistant定制组件和便携式计算机上的侦听器组件应使用此方法。

而已!

翻译自: https://www.javacodegeeks.com/2019/02/conversational-oracle-assistant-fn.html

带有Oracle Digital Assistant和Fn Project的会话式UI。 第三部分,迁移到云相关推荐

  1. 查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI

    查看oracle会话和进程 在这里和那里,我们看到了无数的预测,很快聊天机器人将在用户与其系统之间的通信中扮演关键角色. 我没有水晶球,也不想等待这个"很快",所以我决定现在就使这 ...

  2. 带有Oracle Digital Assistant和Fn Project的会话式UI

    在这里和那里,我们看到许多预测,很快聊天机器人将在用户与其系统之间的通信中扮演关键角色. 我没有水晶球,也不想等待这个"很快",所以我决定现在就使这些预言成真,看看它的样子. 我正 ...

  3. oracle11g安装教程_带有Oracle Digital Assistant和Fn Project的会话式UI

    oracle11g安装教程 在这里和那里,我们看到了许多预测,很快聊天机器人将在用户与其系统之间的通信中发挥关键作用. 我没有水晶球,也不想等待这个"很快",所以我决定现在就使这些 ...

  4. 查看oracle会话和进程_带有Oracle Digital Assistant和Fn Project的会话式UI。 第三部分,迁移到云...

    查看oracle会话和进程 在这篇文章中,我将继续在Oracle Digital Assistant和Oracle Digital Assistant之上为FlexDeploy实现对话式UI的故事. ...

  5. 带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分

    在上一篇文章中,我使用Oracle Digital Assistant为FlexDeploy实现了一个对话式UI. 今天,我将用Fn Flow丰富它,以便聊天机器人接受发行名称而不是ID来创建快照. ...

  6. java 使用 oracle的nvarchar2类型 字符串,java – 使用带有oracle JDBC驱动程序的Types.NVARCHAR来处理Cyrillic字符...

    我正在尝试使用 "New Methods for National Character Set Type Data in JDK 1.6"来获得标准的JDBC解决方案来处理西里尔字 ...

  7. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云

    5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL.PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成.据估算,云上成本 ...

  8. oracle复制数据库文件,史上最简单的方法复制或迁移Oracle数据库

    在DBA的日常工作中,经常需要重装或在新机器上安装Oracle,但每次安装所浪费的时间.精力以及失败的挫折都在考验着DBA的承受能力,本文着重介绍了一个简单的复制和迁移Oracle数据库的方法,详细内 ...

  9. oracle使用expdp/impdp对几百G的大量数据进行迁移

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/89531597 本例 ...

最新文章

  1. FPGA和DSP间基于SRIO的高速通信系统设计
  2. 你花了多久弄明白架构设计?java多线程编程实战指南pdf
  3. Ubuntu12.04使用技巧
  4. Linux操作系统安装---centos6.7安装图文实例详解(完整版)
  5. Kotlin学习笔记-----函数的定义
  6. 监控软件nagios之安装
  7. python面向对象:多态与多态性
  8. oracle实现mysql的if_oracle中decode函数 VS mysql中的if函数和case函数
  9. (一)在GKE上创建MLOps Kubernetes集群
  10. Eclipse远程部署
  11. 星空特效HTML代码,旋转的星空特效代码
  12. 根据APK文件查看应用的MD5签名
  13. 【JAVA】数据结构——二叉树的学习
  14. GDB调试总结和实例
  15. 电脑调分辨率黑屏了怎么办_调显示器分辨率黑屏怎么办
  16. 吾生也有涯,而学也无涯
  17. 我不是刘德华-新地/卢克
  18. android获取键盘状态,Android获取屏幕方向及键盘状态的小例子
  19. 光学雨量计应用降雨量检测
  20. 一个简单的个人视频点播网站制作(一)

热门文章

  1. ssl2863-石子合并【dp练习】
  2. MATLAB灰色预测
  3. 【随机】Kuroni and the Punishment(CF1305F)
  4. [XSY3381] 踢罐子(几何)
  5. <table/>默认适应内容宽度造成滚动条不显示的解决方法
  6. art-template入门(七)之压缩页面
  7. Spring 注入内部 Beans
  8. 全国教学交流研讨会“教学为本”主题总结
  9. hibernate注解实体类(Dept.java)
  10. AVL树的单双旋转解析