在数字化转型成为国家战略和国内外科技大厂的成功经验、强大的宣传攻势和推广能力联合左右下,微服务架构(Microservices Architecture,MSA)毫无疑问已经成为当今基础架构的主流话题,短短几年间席卷全行业,仿佛成了每个行业数字化转型的必由之路。
第三十八章 在 UNIX®、Linux 和 macOS 上使用 IRIS(三)
管理 IRIS
在 shell 中,具有 sysmgr 组中任何用户 ID 的用户都可以运行 ,它调用 目录中的 可执行文件和脚本.以下部分描述了如何在 实例上执行这些管理任务:
重要提示:安装的所有者拥有启动和停止实例、执行系统管理以及为该实例运行诊断程序的完全权限。
只有作为实例所有者的用户 ID 才能并且应该运行所有诊断活动。这确保创建的任何文件或资源都归实例所有者所有,而不是 root(这可能使非 用户无法访问这些资源)。因此,不建议 以任何方式管理不属于 的实例(包括启动和停止实例)。以 身份运行的用户应该只管理 拥有的实例。
启动 IRIS
要启动 IRIS,请在系统级别运行启动程序。此过程激活默认配置文件或您指定的配置文件。
注意:如果在启动 时遇到任何问题,请按照“监控指南”的“监控日志文件”部分中的说明查看 文件。
如果不在控制台机器上,请运行 Telnet 并连接到安装了 IRIS 的目标机器。在可以在 上启动 IRIS 之前,必须满足以下条件之一:
- 超级用户。
- 已以 用户身份登录。 (从另一个帐户登录时,可以接受 (超级用户)为 。)
- 组 与在
IRIS安装期间命名的组匹配,因为它具有停止和启动系统的权限。
使用
第三十章 管理许可(三)
确定许可证容量和使用情况
如何知道已使用了多少许可证以及由谁使用?类中的 %SYSTEM.License 提供了到 IRIS 许可证应用程序编程接口 (API) 的接口,并提供了许多方法和相关查询,可以使用这些方法和相关查询来查询许可证容量和当前使用情况。
可以使用 类的 方法运行多个许可查询。例如:
USER>do ##class(%ResultSet).RunQuery("%SYSTEM.License","Summary")
LicenseUnitUse:Local:Distributed:
当前使用的软件许可单元 :2:2:
使用的最大软件许可单元数 :3:2:
授权的软件许可单元 :25:25:
当前连接 :2:2:
最大连接数 :6:6:
可以从管理门户的许可证使用页面(系统操作 > 许可证使用)查看这些查询的输出,详细信息如下表所示:
| 许可证使用页面上的链接 | License Query |
|---|---|
Summary |
Summary() — 返回许可证使用摘要,如 所示。 |
— 返回操作系统进程标识符 (PID) 使用的许可证,如 所示。 |
|
| —按用户 ID 返回许可证使用。 | |
Distributed License Usage |
— 返回按用户排序的当前分布式许可证使用情况。 (当没有连接许可服务器时禁用此功能。) |
在虚拟化环境中使用镜像,构成镜像的InterSystems IRIS实例被安装在虚拟主机上,创造了一个混合的高可用性解决方案,将镜像的优点与虚拟化的优点结合起来。镜像通过自动故障切换对计划内或计划外的故障提供即时响应,而虚拟化HA软件在计划外的机器或操作系统故障后自动重新启动承载镜像成员的虚拟机。这允许失败的成员迅速重新加入镜像,充当备份(或在必要时作为主机)。
当镜像被配置在虚拟化环境中时,请参考以下建议:
- 故障转移成员的虚拟主机和备机不可以配置在同一台物理机上。
- 为了避免单点存储故障,故障转移成员上的InterSystems IRIS实例所使用的存储应永久隔离在不同磁盘组或存储阵列的独立数据存储中。
- 在虚拟化平台层面上进行的一些操作,如备份或迁移,可能会导致故障转移成员长时间没有反应,从而导致不需要的故障转移或不理想的警报频率。为了解决这个问题,你可以增加QoS超时设置。
- 在进行导致故障转移成员连接中断的计划性维护操作时,你可以暂时停止备份上的镜像,以避免不必要的故障转移和警报。
- 在镜像成员上必须非常谨慎地使用快照管理,因为将一个成员恢复到早期的快照,既会删除该成员的最新状态(例如,自拍摄快照以来,该成员可能已经从主机变为备机),也会删除其他成员仍然拥有的日志数据。
1. VMWare快照引起的网络中断导致非计划内主备机切换问题
1.1 问题描述
在创建虚拟机快照时,虚拟机需要短时间的冻结,这个短时间冻结通常指虚拟机静默,在静默过程中网络连接处于中断状态。由于数据库的不断增长,使用VMWare快照的方式对虚拟机进行备份的时长也会不断增加,当对虚拟机进行快照的时长长于InterSystems镜像服务质量 (QoS) 超时时间,即当主机网络中断超过QoS超时时间,仲裁机与备机观察并相互确认与主机的连接丢失后,将发起切换过程,使原备机成为主机并将虚拟IP从主机MAC地址解绑后重绑定到备机的MAC地址上。特别需要注意的是,在这种由于网络中断引起的切换中,仲裁与备机都无法得知主机的实际工作状态。因此,在主机网络连接恢复后,为了为了避免因切换期间主机还在处理数据导致主备机间数据不一致,备机主动发起请求让主机下线,关闭主机,此时主机状态显示为关闭(Down)。
1.
第三十七章 在 UNIX®、Linux 和 macOS 上使用 IRIS(二)
在 UNIX® 上启动
IRIS 实例使用以下资源来控制启动、停止和创建新进程:
install-dir\mgr目录中的iris.ids文件。- 共享内存。
守护进程资源锁
IRIS 使用建议文件锁定来防止同一实例在不同机器上的多次启动。使用咨询文件锁定,单个锁定文件(在本例中为 目录中的文件 ilock)可用于独占锁定多个资源。控制进程、写入守护进程和日志守护进程分别锁定锁定文件的一个单独部分。如果 文件的这一部分已被锁定,则启动将终止。不同守护进程持有的锁称为守护进程资源锁。
文件锁由进程持有,直到进程终止。因此,如果持有任何锁,则表明某个节点上的某个守护进程正在运行。但是,它并不表示实例是否健康并正常运行。
iris.ids File
文件包含启动 的节点的名称。 iris.ids 文件的存在充当 实用程序和客户编写的脚本的标志,指示实例是否启动并运行。该文件在启动过程中经常被忽略。但是,如果在读取 时发生错误,则会阻止 启动。在以前版本的 中,共享内存标识符也存储在 文件中,但现在不再如此。
启动顺序
为了更好地理解启动顺序,假设实例可以从两 (2) 个不同的节点(机器),节点 和节点 运行。
请教一下,如何在消息查看器打开”显示查询“这个按钮的显示开关
开发者社区的同学们,大家好!
在 之前的公告 中,我们向大家介绍了InterSystems官方反馈门户 InterSystems Ideas! 今天想给大家介绍更多,尤其是涉及到的主题。
.png)
你可以按以下主题类别提交你的想法:
开发者社区的同学们,大家好!
我们一直以来都有一个想法——改进收集、分析和回应开发者社区成员们的产品改进请求的过程。我们知道,我们需要一个良好的用户体验,甚至更好的内部流程,来确保收集、听取和响应最好的想法。现在,这个想法终于实现了!
我们在此向您介绍 InterSystems官方反馈门户
💡 >> InterSystems Ideas << 💡
第三十六章 在 UNIX®、Linux 和 macOS 上使用 IRIS(一)
本章介绍Unix®、Linux和MacOS上的特定管理程序。
用户、组和权限
平台上的每个 IRIS® 数据平台安装都有以下用户和组:
Root—IRIS必须由root安装, 系统守护程序的某些处理以 身份运行。- 实例所有者 — 此用户拥有大多数安装文件并完全控制实例。如果使用最小初始安全设置进行安装,则 是默认所有者;否则,在安装过程中会提示输入所有者。
- 超级服务器及其作业的有效用户——所有由超级服务器生成的用于处理传入请求的 进程都以此用户身份运行;此外,由作业服务器进程、任务管理器作业和用户定义的启动例程(例如,
^%ZSTART)托管的作业也以该用户身份运行。默认情况下,此用户是 ,但可以在自定义安装期间更改用户。 - 进程的有效组——所有 进程自动作为该组运行,这允许普通用户在
IRIS内访问他们可能没有被授予访问权限的 数据库和日志文件;这些和其他 文件的文件权限设置为允许该组具有适当的访问权限。在安全系统上,只有 超级服务器及其作业的有效用户应该是该组的成员。默认情况下,该组包含 ,但您可以在自定义安装期间更改该组。 - 允许启动和停止实例的组 — 该组、 和实例所有者可以启动和停止 。
所有日志和日志目录必须将组所有权设置为
这是一篇笔记:
说明
Restful是一种基于Http的网络应用程序的设计风格和开发方式,可以使用xml格式或者Json格式定义。
RESTFUL特点包括:
1、每一个URI代表1种资源;
2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;
3、通过操作资源的表现形式来操作资源;
4、资源的表现形式是XML或者HTML;
5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。
IRIS中实现
GET:
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap"在更新医保码库前,我们想对旧码库做个备份,以防更新过程失败,还可以还原。
oracle支持 CREATE TABLE AS ..... 的语法快速备份一张表,cache 似乎不支持这个语法,
大家平时是怎么备份一张码表的呢?
最好是像 oracle 那样一条命令搞定的那种。
第三十五章 在 Windows 上使用 IRIS(二)
IRIS 启动器
Microsoft Windows 平台上的主要IRIS 界面是 IRIS 启动器。从 启动器,可以启动所有 配置和管理工具。还可以从快捷方式或命令行调用每个启动器命令。
相应地,可以从 程序菜单中启动许多 工具,方法是指向 IRIS 文件夹,然后指向启动 以获得适当的 实例名称。
当在基于 的系统上启动 时, IRIS 启动器图标会出现在任务栏的系统托盘中。
当单击 启动器时,会出现一个菜单,其中包含使用 实用程序和编程环境的命令。
下表描述了 IRIS 启动器菜单中可用的命令。
| IRIS 启动器命令 | 描述 |
|---|---|
Getting Started |
显示教程、发行说明、文档和其他相关信息的链接 |
Start IRIS |
启动菜单项后方括号中指定的默认实例,例如 [ii2081]。如果 服务器已经启动,这个选项会变暗——它不可用。 |
Stop InterSystems |
关闭或重新启动本地 实例。如果 服务器已停止,此选项将显示为灰色——它不可用。 |
Studio |
创建、编辑、删除和编译 类定义和例程。 |
调用 IRIS 的命令行解释器。 |
|
执行常见的系统管理任务。创建数据库和命名空间,并调整所有 IRIS 配置设置。 |
好消息, InterSystems 容器镜像仓库Docker桌面扩展已正式发布供大家 下载 .
.png)
大家可以在Docker桌面版的marketplace 下载.下载后需要重启 Docker Desktop to
把数据库添加进Mirror
以往的经验里, 用户在把数据库添加到镜像时遇到过各种各样的问题,以致必须请求外部帮助才能解决。除了步骤本身比较繁琐,很大的原因是阅读文档不细致。还有一个,就是对英文水平不太高的用户,有些英文句式并不是很好懂,比如说,文档中有这一句其实非常关键:
If you attempt to add a new database to the mirror on a nonprimary member that was not created as a mirrored database on the primary, but rather added to the mirror after it was created, an error message notes this and you cannot complete the operation.
我用最好的翻译器DeepL翻译后的中文是:
如果你试图在一个非主要成员上向镜像添加一个新的数据库,而这个数据库并不是在主要成员上作为镜像数据库创建的,而是在创建后添加到镜像中的,那么就会出现错误信息提示,你无法完成操作。
Mirror的配置
这里详细介绍了主成员(Primary)和备用成员(Backup)的设置过程。 虽然也包括了异步成员配置的章节,其实我没有真的操作,我认为应该没有特别需要注意的。
配置Mirror应该有这么几步:
1. 启动Mirror服务
进入系统管理界面,选择系统管理>配置>镜像设置>启动镜像服务,勾选服务已启动, 保存退出。这是可以看到菜单栏的创建镜像条目已经从灰色变成正常的白色,表示您已经可以创建镜像。
仅仅是打开服务,并没有修改Journal文件
2. 创建镜像,添加主成员
在管理界面进入“系统>配置>镜像设置>创建镜像”,从这里开始镜像的创建工作。创建镜像的同时,这一步还包括把本机做为第一个镜像成员加入到镜像。第一个镜像成员被加入后会成为主镜像成员, 菜单里的英文是“Primary Failover Member"。
Warning: 如果本机的ISCAgent没有启动, 您会得到提示“错误 #2118: ISCAgent不在本地系统中启动”。另外,特殊情况下,您还可能会碰到错误提示:“错误 #2136: 实例的版本高于ISCAgent的版本”。
镜像的设置
如下面的截图,创建镜像需要提供这些配置信息:

-
镜像名称:可以是任意的名称, 和各个服务器/成员的名称无关。
-
需要SSL/TLS:如果您不勾选此选项,会得到“强烈建议使用SSL/TLS"的提示信息。
因为篇幅太长, 我把它分为3篇贴在社区
配置前的准备
配置Mirror前要准备三件事儿:
- 规划网络连接。
- 在所有的服务器中启动ISCAgent服务。
- 准备服务器的SSL/TLS证书。可选, 但非常推荐。
我假设您在动手前一定已经对Mirror的原理和架构已经不陌生了,对镜像成员,DR(灾备)成员, Arbiter, ISCAgent等术语已经自动切换的概念有大概的认识。如果不是这样,请先阅读在线文档,或者这篇文章。
规划网络连接
Mirror应该配置两个网段:一个用于IRIS和外部的通信;另一个用于两个Mirror成员间的内部通信,也就是数据的同步。 尽管不是必须的,但Mirror作为一个高可用方案,为了保证服务器之间的内部通信不受和外部连接的干扰,把内部通信放在单独的网段是通常的做法,尤其是在生产环境。
下图来自IRIS的在线文档:其中绿色所示的是IRIS提供服务的网段,IRIS到所有外部系统的连接,ECP应用服务器,和Arbiter在工作在这个网段。紫色的“Data Center Private LAN for Mirror Communication"用于内部通信,准确的说, 用于journal的同步。为了方便, 我会在后面的步骤中简单的把这两个网段简单的称为外网网段和内网网段。

也是来自在线文档,上图的IP地址配置像这个样子。
第三十四章 在 Windows 上使用 IRIS(一)
在 Microsoft Windows 平台上管理 IRIS 数据平台实例非常简单。可以使用管理门户和 IRIS 启动器执行大多数任务。还可以从命令提示符控制 实例。
本主题使用 来指代 安装目录——可以在安装指南的默认安装目录部分找到默认目录。
注意:不要对 IRIS IRIS.DAT 数据库文件使用 Windows 文件压缩。 (通过右键单击 Windows 资源管理器中的文件或文件夹并选择属性,然后选择高级,然后压缩内容以节省磁盘空间来压缩文件;压缩后,文件夹名称或文件名在 资源管理器中呈现为蓝色。)如果压缩一个 文件,它所属的实例将无法启动,并出现误导性错误。
管理对 实例的访问
InterSystems 服务
所有 IRIS job和进程都从 服务、 运行。 服务具有的权限由其关联的 用户帐户决定。当这是本地 SYSTEM 帐户时, 可以访问 系统上的所有文件和权限。为了维护一个更安全和限制性更强的环境,应该为服务选择一个仅具有所需权限和访问权限的 帐户。
在正常安装和锁定安装中, 创建两个本地用户组来授予对实例的访问权限。当为 服务指定一个 Windows 用户帐户而不是默认的本地 帐户时 将该 用户帐户添加到每个组。这些组是:
- ,它授予启动、停止和控制
IRIS
此篇文章给大家介绍一个使用pyodbc连接到 InterSystems IRIS数据库的示例,详情如下:
InterSystems IRIS 安装在Redhat 操作系统中,使用pyodbc在Mac操作系统中连接到Redhat 操作系统中InterSystems IRIS数据库。
- 下载测试代码
- 使用vscode打开测试代码,并在Solutions文件夹下安装pyodbc
pip install pyodbc
- 在Mac操作系统中安装ODBC驱动
brew update brew install unixodbc
- 安装后,查看Mac操作系统中的odbcinst.ini文件,此时odbcinst.ini文件应该是空的。
- Mac操作系统中/usr/local/bin下使用下列命令注册驱动 或者 配置DSN
- 注册ODBC驱动
odbcinst -i -d -f pyodbc_wheel/mac/odbcinst.ini
- 配置本地DSN
pyodbc_wheel/mac/odbcinst.iniodbcinst -i -s -h -f odbc.ini_unixODBCtemplate
- 配置系统DSN
odbcinst -i -s -l -f pyodbc_wheel/mac/odbcinst.ini
连接前准备:
- Python 开发环境
- DB-API驱动:irispython wheel 文件
- Connection String
步骤:
- 安装irispython wheel 文件
pip install intersystems_irispython-3.2.0-py3-none-any.whl
- Connection String:其中import iris 用来导入iris, connection = iris.connect是connection string。connection.close()用来断开连接。
import iris def main(): connection_string = "localhost:1972/USER" username = "SQLAdmin" password = "deployment-password" connection = iris.connect(connection_string, username, password) # when finished, use the line below to close the connection # connection.close() if __name__ == "__main__": main()
连接前准备:
- .Net 开发环境
- InterSystems IRIS 客户端组件:InterSystems.Data.IRISClient.dll,这个dll文件可以再IRIS安装包中找到,在IRIS/dev/dotnet/bin/version
- Connection String
步骤:
- 在.Net 开发环境中,配置客户端组件InterSystems.Data.IRISClient.dll作为一个dependency
.png)
- Connection String:其中using InterSystems.Data.IRISClient 用来导入需要使用的dll文件,string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password"是connection string。
using System; using InterSystems.Data.IRISClient; namespace ADODemo { internal class Program { static void Main(string[] args) { string connectionString = "Server = localhost; Port = 1972; Namespace = User; User ID = SQLAdmin; Password = deployment-password"; IRISADOConnection connection = new IRISADOConnection(connectionString); connection.Open(); // when finished, use the line below to close the connection // connection.Close(); } } }
连接前准备:
- C++ 开发环境
- InterSystems ODBC 驱动 (ODBC 驱动会随InterSystems IRIS安装包自动安装在服务器中)
- Connection String
步骤:
- Connection String:其中#include 用来导入需要使用的libraries,"Driver=InterSystems IRIS ODBC35;Host=localhost;Port=1972;Database=USER;UID=SQLAdmin;PWD=deployment-password;\0";是connection string。
#ifdef WIN32 #include <windows.h> #endif #include <sqlext.h> #ifdef UNICODE #include <sqlucode.h> #endif #include <stdio.h> int main() { RETCODE rc; /* Return code for ODBC functions */ HENV henv = NULL; /* Environment handle */ HDBC hdbc = NULL; /* Connection handle */ unsigned char szOutConn[600]; SQLSMALLINT *cbOutConn = 0; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); char connect_cmd[255] = "Driver=InterSystems IRIS ODBC35;Host=localhost;Port=1972;Database=USER;UID=SQLAdmin;PWD=deployment-password;\0"; rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*) connect_cmd, SQL_NTS, szOutConn, 600, cbOutConn, SQL_DRIVER_COMPLETE); if (rc == SQL_SUCCESS) { printf("Successfully connected!!\n"); } else { printf("Failed to connect to IRIS\n"); exit(1); } SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); /* Free connection handle */ SQLFreeHandle(SQL_HANDLE_ENV, henv); /* Free environment handle */ return 0; }
连接前准备:
- Java 开发环境
- InterSystems JDBC 驱动
- Connection String
步骤:
- 配置 Classpath :指向InterSystems JDBC 驱动 - intersystems-jdbc-3.0.0.0.jar
- Connection String,其中import com.intersystems.jdbc*;用来导入驱动,User是命名空间名称。
import com.intersystems.jdbc*; import java.sql.Connection; public class JDBCConnection{ public static void main (String[] args) throws Exception { String dbUrl = "jdbc:IRIS://127.0.0.1:1972/User"; //replace String user = "SQLAdmin"; String pass = "deployment-password"; IRISDataSource ds = new IRISDataSource(); ds.setURL(dbUrl); ds.setUser(user); ds.setPassword(pass); Connection dbconnection = ds.getConnection(); System.out.println("Connected to InterSystems IRIS via JDBC."); } }
第三十三章 管理许可(六)
应用许可
应用程序许可使应用程序合作伙伴能够利用 的许可功能来实现自己的许可目的。 IRIS 像管理自己的应用程序许可证一样管理客户应用程序许可证,维护使用计数并根据需要获取和返回用户许可证。当进程退出、停止或从进程表中删除时,或者当 Web 会话超时或被删除时,进程或 Web 会话使用的应用程序许可证与进程或会话使用的 许可证一起自动释放。
应用程序许可证只是标准 格式的文件或此类文件的一部分,包含标识应用程序的部分标题和一些对,在许可证中是唯一的,代表许可的功能。任何格式正确的应用程序许可证都可以在运行时由应用程序加载到 IRIS。
应用程序许可 包括使应用程序能够代表用户使用和返回许可证的方法和查询,以及使程序能够获取有关应用程序和功能许可的信息,包括正在使用和仍然可用的许可证数量。
加载应用程序许可证
实例可以在应用程序运行时使用 $SYSTEM.License.LoadAppLicenseFile 方法加载和激活任何应用程序许可,该方法记录在 %SYSTEM.License 的类参考中(请参阅应用程序许可 API)。以这种方式加载的应用程序许可证与活动的 许可证无关,但由 实例独立跟踪。
每个应用程序许可证都包含在以 开头的部分中;应用程序名称
InterSystems IRIS是一个伟大的数据平台,它满足了当前市场所需的功能。在这篇文章中,你可以看到我心目中的前10大功能:
| 排名 | 特性 | 原因 | 了解更多 |
| 1 | 互操作性, FHIR 和物联网 | 商业机构之间需要持续互联和交换数据。各个业务部门之间也需要加强协作来将本增效。实现协作的最佳技术是IRIS的互操作工具包,尤其是 服务总线ESB, 集成适配器,业务流程自动化引擎,数据转化工具以及例如FHIR和MQTT等。 | |
| 2 | API 管理器 | 大家通过API来消费数字资产。API需要在一个中心点管理其重用、安全、消费、资产目录、开发者生态系统和其他方面。API管理器是实现这一目标的正确工具。因此,所有的公司都有或希望有一个API管理器。 | Link |
| 3 | 数据分片 | 据预测,全球创造、捕获、复制和消费的数据总量将迅速增加,在2020年达到64.2 zettabytes。在接下来的五年里,直到2025年,全球数据创建量预计将增长到180兆字节以上。在2020年,创造和复制的数据量达到了新高(来源:https://www.statista.com/ statistics/871513/worldwide-data-created/)。在这种情况下,能够以分布式的方式处理数据(进入数据分片,如hadoop或mongodb),以提高和保持性能,对企业至关重要。 |
Spring Boot 是最常用来创建 REST API 和微服务的 Java 框架。 它可用于部署 Web 应用程序、可执行 Web 应用程序或桌面自包含应用程序,其中应用程序和其他依赖项打包在一起。 Spring Boot 允许执行许多功能,请参见:

注:要了解有关 SpringBoot 的信息,请参见官方网站 - https://spring.io/quickstart
要创建具有一个或多个微服务的 Web api 应用程序,可以使用 Spring IDE for Eclipse/VSCode,并使用向导配置上述将在应用程序中使用的技术,请参见:
您可以选择技术并创建项目。 所有技术都将通过 maven 导入。 它就像一个可视化的 zpm。
所创建的项目有一个类用于为应用程序提供支持,其中包含所有所需内容(Web 和应用程序服务器,以及所有依赖项、微服务概念)。
此项目的完整源代码在以下 open exchange 项目中: https://openexchange.intersystems.com/package/springboot-iris-crud。
首先要配置 IRIS JDBC 驱动程序和 IRIS Hibernate 支持,为此,请将 jar 文件复制到 resources 文件夹,请参见:
打开 pom.
关于微服务架构(MSA)的IRIS定位的初学者指南。MSA在企业级Java世界中的能见度越来越高,因此,了解这股热潮背后的内容是至关重要的。我尝试着写下我的观点并与大家分享。
背景
首先,我必须承认。今年初夏,我的同事要求我收集一些关于匈牙利开发的医疗产品的信息。当我从相关公司得到反馈时,发现该产品是一个模块化系统,基于微服务架构(MSA)。好的。什么是MSA?在网上做了简短的研究,阅读了一些WIKI网页后,我得出结论:啊哈,又是一个 "架构"。我们可以用IRIS在 "架构层面 "遵守 "任何架构"--至少 "在某种程度上"。但也有一些恼人的地方。这让我对MSA有了更多的了解。到目前为止还不错,但是REST不是这篇文章的主要话题吗?MSA和REST之间的关系是什么?我访问的几乎每个网站都在例子中使用了RESTful网络服务。这让我有点怀疑。但总的来说,我赞同对MSA的一般总结:它是SOAP但做得很好。特别是因为有一些关于 "内聚 "和 "耦合 "的句子,我完全不明白。那么,如果MSA只是 "SOAP做得好",为什么我没有看到SOAP的例子?为什么这些例子(几乎)都是RESTful?
在这个问题之前,对我来说,"REST "是一个使用JSON序列化数据交换的网络服务,通过HTTP传输。但是在那个时候,我脑子里有太多的问题,因此我开始阅读REST文献。很快我就找到了起源。
如果你读了我之前介绍QEWD微服务的文章,希望你会渴望了解如何使用它们。 所以在这篇文章中,我将解释你需要知道的东西,以便开始使用。
如果你在QEWD资源库中,你会发现目录:
https://github.com/robtweed/qewd/blob/master/example/jwt
在我之前关于JSON网络令牌(JWTs)和QEWD的文章中,我用这个示例应用程序来解释如何使用JWTs。 这个示例应用程序还演示了如何设置一个简单的微服务,在这种情况下是一个处理用户认证的服务。 所以,现在让我深入了解一下这个例子应用程序的这方面内容。
如果你想使用QEWD微服务,你也必须使用JWTs--它们提供了一种方法,用户的认证和会话可以被多个独立的QEWD服务器交叉通信和处理。 因此,请看一下启动文件:
https://github.com/robtweed/qewd/blob/master/example/jwt/startup_file/q….
第三十二章 管理许可(五)
Identifying Users
IRIS 许可系统识别不同的用户并为每个用户分配一个许可单元。用户由许可证用户 ID 标识,该 ID 可以是 地址、用户名、 会话 ID 或其他标识符,具体取决于用户的连接方式。
由单个用户启动或为单个用户启动的多个进程共享一个许可证单元,最多可达每个用户的最大进程数。如果进程数超过此最大值,则会发生转换 IRIS 开始为该用户 ID 的每个进程分配一个许可单元。系统假设如果与用户 关联的进程数超过最大值,则多个用户正在通过中介(例如防火墙系统)访问 ,因此需要额外的许可证单元。 (由 命令启动的进程计入调用该命令的用户 下。)
即使用户 下的进程数回落到最大值以下, 仍会继续为该用户 的每个进程分配一个许可单元。只有当用户 的所有连接都关闭并且用户 下没有更多进程时,许可证分配才会重置为该用户 的一个单位。
通过名称识别用户的应用程序消除了与使用基于客户端 IP 地址、 会话 ID 或其他连接派生用户 的默认用户 相关的问题。
例如,当使用防火墙或终端服务器软件时, 无法区分连接用户,因此它依赖于最大连接转换规则。使用来自同一客户端的混合连接也使得无法使用自动 创建适当地计算用户数。
当用户名用作许可证标识符时,这些问题就消失了。
研究Healthshare2018在已经安装完成使用的情况下,部署IIS,并代理平台。之前看到可以通过单独的CSP Gateway安装包进行处理这种问题,该文主要是获取不到该安装包的时候可以如何实现IIS的处理。
第一步:首先按照网上教程部署IIS服务。安装完成之后会在C盘创建一个名叫intepub的包。
第二步:在inetpub包下面直接插入CSPGateway 。这个包是在其他先安装IIS下,后安装Healthshare的CSP网关服务的时候在inetpub下面自动插入的包,直接找一个复制过来。
第三步:打开IIS,创建一个叫csp的网站,按照下图配置。
第四步:在点击模块进行CSPms模块的添加。
接下来是配置好的CSPms的模块。
注意:我们从图中看到的CSPms模块是本机继承的模块,我们在右边添加本机模块的时候并不能找到C:\inetpub\CSPGateway\CSPms.dll这个模块,导致加不进去。那我们就直接在配置文件上面改。找到C:\Windows\System32\inetsrv\config该文件路径下的applicationHost.config文件,为了稳妥起见,我们先备份一下该文件。
找到<globalModules>节点,在下面加入<add name="CSPms" image="C:\Inetpub\CSPGateway\CSPms.


