TIBRV sender (with C#)
Peponi │ 11/19/2024 │ 3m
C#
TIBCORendezvousMessageMiddlewareDaemon
TIBRV sender (with C#)
11/19/2024
3m
Peponi
C#
TIBCORendezvousMessageMiddlewareDaemon
1. Introduction
TIBCO Rendezvous는 TIBCO社의 메시징 미들웨어로, 여러 프로그래밍 언어를 지원하여 다양한 구성으로 통신이 가능하다. 유료 소프트웨어이기 때문에 사용을 위해 구매가 필요하다. 사용하면서 느낀 가장 큰 특징은 아래와 같다.
- 네트워크 정보를 알 필요 없이
Subject
를Listener
에 등록하여 원하는 메시지를 받을 수 있다.
=> 네트워크 시스템 구성 요소의 추가, 제거가 자유롭다. - 생산자 측에서 메시지에 새로운 필드를 추가하더라도, 각
Listener
들은 통신을 수정할 필요가 없다.
=> 하나의 구성 요소에서 디테일을 분리하여 운용할 수 있다.
아래는 Sender
통신 예제이다.
2. Example
using TIBCO.Rendezvous;
namespace TIBRVSender
{
internal class Program
{
private static Transport? _transport;
private static string _daemonAddress = string.Empty; // Remote의 daemon을 쓴다면 주소 정해줌, 로컬이면 tcp 입력
private static int _daemonPort = 0; // Remote의 daemon을 쓴다면 정해줌, 로컬이면 7500 (Auto-Start)
// Demo params
private static List<string> _demoSubjects = new();
private static List<string> _demoFields = new();
static void Main(string[] args)
{
SetupDemo();
Console.WriteLine("Connect to daemon");
if (Connect()) Console.WriteLine("Ready to send");
else
{
Console.WriteLine("Failed to connect");
return;
}
while (true)
{
Console.WriteLine("Input X to exit");
Console.WriteLine("Input demo message");
var sendMessage = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(sendMessage))
{
if (sendMessage.ToUpper() == "X")
{
Disconnect();
return;
}
else
{
SendMessage(sendMessage);
}
}
}
}
static bool Connect()
{
TIBCO.Rendezvous.Environment.Open();
// Check connect
try
{
_transport = new NetTransport(":0", ";", $"{_daemonAddress}:{_daemonPort}");
}
catch (RendezvousException e)
{
Console.WriteLine($"Create transport error - {e.Message}");
return false;
}
return true;
}
static bool Disconnect()
{
_transport?.Destroy();
_transport = null;
TIBCO.Rendezvous.Environment.Close();
Console.WriteLine("Disconnected");
return true;
}
static void SendMessage(string sendMessage)
{
foreach (var subject in _demoSubjects)
{
Message message = new();
message.SendSubject = subject;
foreach (var field in _demoFields) message.AddField(field, sendMessage);
try
{
_transport?.Send(message);
Console.WriteLine($"TIBRV Send - Subject : {message.SendSubject}");
Console.WriteLine($"TIBRV Send - message : {message}");
}
catch (RendezvousException e)
{
Console.WriteLine($"Failed to send a message - {e.Message}");
}
}
}
static void SetupDemo()
{
_daemonAddress = "tcp";
_daemonPort = 7500;
for (int i = 0; i < 3; i++)
{
_demoSubjects.Add($"Demo{i}");
_demoFields.Add($"Field{i}");
}
}
}
}