#tokio-codec #hl7 #message #layer #lower #protocols #mllp

hl7-mllp-codec

A Tokio codec for HL7 Minimal Lower Layer Message Transport protocol (MLLP)

9 个版本

0.4.0 2022 年 7 月 22 日
0.3.0 2021 年 8 月 5 日
0.2.0 2021 年 8 月 2 日
0.0.6 2019 年 11 月 29 日

#1413 in 异步

Download history 12/week @ 2024-04-05 2/week @ 2024-04-12 4/week @ 2024-04-19 1/week @ 2024-04-26 17/week @ 2024-05-17 15/week @ 2024-05-24 11/week @ 2024-06-07 17/week @ 2024-06-14 3/week @ 2024-06-21 2/week @ 2024-06-28 54/week @ 2024-07-05 2/week @ 2024-07-19

每月 58 次下载

MIT 许可证

22KB
294

一个用于 Tokio 的 HL7 MLLP 编解码器

这是一个 tokio 玩乐项目,在 tokio 编码器中实现对 HL7 最小底层消息传输协议 (MLLP) 的支持。

Latest version Documentation

通过 cargo r --release --example listener 在 127.0.0.1:8080 运行示例监听器,或使用 cargo r --release --example publisher 运行示例发布者

文档可以从 cargo doc --lib --open 获得


lib.rs:

HL7 MLLP 网络协议的 tokio 编解码器实现。

HL7 的 MLLP 是一个简单、基于单字节文本的协议,用于在 TCP(或类似)传输上封装 HL7 消息。完整的规范可在 HL7 网站 上找到(注意,他们将标准放在免费会员/登录表单后面)。

此 crate 提供了一个 Codec 实现,可以编码/解码从 Tokio 流中读取的 MLLP 帧,允许以简单的方式编程访问消息(包括主消息和 ack/nack)。

Tokio(以及 Rust 异步生态系统)目前处于动荡状态,但源代码中有两个简单的(非生产就绪!)示例,一个是发布者,一个是监听器。请注意,这些示例只是将输出写入控制台,这可能会严重限制吞吐量。如果您想使用示例进行简单的性能测试,请确保最小化写入的数据量。

示例

这是一个高度简化的示例,摘自源控制中的示例。

出版商

use bytes::*;
use tokio_util::codec::Framed;
use tokio::net::TcpStream;
use futures::{SinkExt, StreamExt};

use hl7_mllp_codec::MllpCodec;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Open a TCP stream to the socket address.
let stream = TcpStream::connect("127.0.0.1:8080").await?;

// Construct a MLLP transport using our codec
let mut transport = Framed::new(stream, MllpCodec::new());

// Send some bytes wrapped in MLLP (Note: not a valid HL7 message)
transport.send(BytesMut::from("Hello World")).await?; //because this is through the codec it gets wrapped in MLLP header/footer for us

if let Some(response) = transport.next().await {
match response{
Ok(msg) => println!("  Received response: {:?}", msg),
Err(e) => println!("  ERROR: {:?}", e)
}
}

Ok(())
}

箱子功能

默认情况下,这个箱子被设计成严格遵循MLLP规范,然而在生产环境中,有些系统遵守标准。在这些情况下,有一个名为noncompliance的功能可用,它允许一些不合规的行为

  • 在发布者未能等待确认/否定应答的情况下,移除了假设线上只存在一条消息,并异步发布多条消息

依赖项

~2.5–3.5MB
~56K SLoC