1,什么是rv?
请查看本人的文章https://blog.csdn.net/qq_41886200/article/details/109180360
2,rv的安装
rv属于商业收费软件,这里就省略不说了,安装教程都在文档里
3,rv的消息监听
rv的callBack接口,就是实现监听的主要方式,实现TibrvMsgCallback,即可实现对某个广播段的监听
代码
package test;
import java.util.*;
import com.tibco.tibrv.*;
public class RvlistenerDemo implements TibrvMsgCallback {
String service = null;
String network = null;
String daemon = null;
public RvlistenerDemo(String... args) {
// parse arguments for possible optional
// parameters. These must precede the subject
// and message strings
args = addServerName(args);
int i = get_InitParams(args);
// we must have at least one subject
if (i >= args.length)
usage();
// open Tibrv in native implementation
try {
Tibrv.open(Tibrv.IMPL_NATIVE);
} catch (TibrvException e) {
System.err.println("Failed to open Tibrv in native implementation:");
e.printStackTrace();
System.exit(0);
}
// Create RVD transport
TibrvTransport transport = null;
try {
transport = new TibrvRvdTransport(service, network, daemon);
} catch (TibrvException e) {
System.err.println("Failed to create TibrvRvdTransport:");
e.printStackTrace();
System.exit(0);
}
// Create listeners for specified subjects
while (i < args.length) {
// create listener using default queue
try {
new TibrvListener(Tibrv.defaultQueue(),
this, transport, args[i], null);
System.err.println("Listening on: " + args[i]);
} catch (TibrvException e) {
System.err.println("Failed to create listener:");
e.printStackTrace();
System.exit(0);
}
i++;
}
// dispatch Tibrv events
while (true) {
try {
Tibrv.defaultQueue().dispatch();
} catch (TibrvException e) {
System.err.println("Exception dispatching default queue:");
e.printStackTrace();
System.exit(0);
} catch (InterruptedException ie) {
System.exit(0);
}
}
}
public void onMsg(TibrvListener listener, TibrvMsg msg) {
System.out.println((new Date()).toString() +
": subject=" + msg.getSendSubject() +
", reply=" + msg.getReplySubject() +
", message=" + msg.toString()
);
System.out.flush();
}
// print usage information and quit
void usage() {
System.err.println("Usage: java tibrvlisten [-service service] [-network network]");
System.err.println(" [-daemon daemon] <subject-list>");
System.exit(-1);
}
/**
* 添加命令参数
*
* @param args
* @return
*/
public String[] addServerName(String[] args) {
List<String> stringList = new ArrayList<>();
for (int i = 0; i < args.length; i++) {
String serverName = "";
if (i == 0) {
serverName = "-service";
} else if (i == 1) {
serverName = "-network";
} else if (i == 2) {
serverName = "-daemon";
}
if (!serverName.equals("")) {
stringList.add(serverName);
}
stringList.add(args[i]);
}
return stringList.toArray(new String[stringList.size()]);
}
/**
* 添加参数
*
* @param args
* @return
*/
int get_InitParams(String[] args) {
int i = 0;
System.out.println(Arrays.toString(args));
while (i < args.length - 1 && args[i].startsWith("-")) {
if (args[i].equals("-service")) {
service = args[i + 1];
i += 2;
} else if (args[i].equals("-network")) {
network = args[i + 1];
i += 2;
} else if (args[i].equals("-daemon")) {
daemon = args[i + 1];
i += 2;
} else
usage();
}
return i;
}
public static void main(String[] args) {
//监听
String service = "1200";
String network = ";225.19.19.12";
String daemon = "10.50.10.72:7500";
String subject = "cm.test";
RvlistenerDemo rl = new RvlistenerDemo(service, network, daemon, subject);
}
}
这样就实现了一个监听,
发送的话就比较简单
package test;
import java.util.*;
import com.tibco.tibrv.*;
public class RvSendDemo {
String service = null;
String network = null;
String daemon = null;
String FIELD_NAME = "DATA";
/**
* @param args
* @return
*/
public RvSendDemo(String... args) {
// parse arguments for possible optional
// parameters. These must precede the subject
// and message strings
args = addServerName(args);
int i = get_InitParams(args);
// we must have at least one subject and one message
if (i > args.length - 2)
usage();
// open Tibrv in native implementation
try {
if (Tibrv.isValid()) {//这里找不到ISIPM()这个方法暂时用着注销错误
} else {
Tibrv.open(Tibrv.IMPL_NATIVE);
}
} catch (TibrvException e) {
System.err.println("Failed to open Tibrv in native implementation:");
e.printStackTrace();
System.exit(0);
}
// Create RVD transport
TibrvTransport transport = null;
try {
transport = new TibrvRvdTransport(service, network, daemon);
} catch (TibrvException e) {
System.err.println("Failed to create TibrvRvdTransport:");
e.printStackTrace();
System.exit(0);
}
// Create the message
TibrvMsg msg = new TibrvMsg();
// Set send subject into the message
try {
msg.setSendSubject(args[i++]);
} catch (TibrvException e) {
System.err.println("Failed to set send subject:");
e.printStackTrace();
System.exit(0);
}
try {
// Send one message for each parameter
while (i < args.length) {
System.out.println("Publishing: subject=" + msg.getSendSubject() +
" \"" + args[i] + "\"");
msg.update(FIELD_NAME, args[i]);
transport.send(msg);
i++;
}
} catch (TibrvException e) {
System.err.println("Error sending a message:");
e.printStackTrace();
System.exit(0);
}
// Close Tibrv, it will cleanup all underlying memory, destroy
// transport and guarantee delivery.
try {
Tibrv.close();
} catch (TibrvException e) {
System.err.println("Exception dispatching default queue:");
e.printStackTrace();
System.exit(0);
}
}
// print usage information and quit
void usage() {
System.err.println("Usage: java tibrvsend [-service service] [-network network]");
System.err.println(" [-daemon daemon] <subject> <messages>");
System.exit(-1);
}
/**
* 添加命令参数
*
* @param args
* @return
*/
public String[] addServerName(String[] args) {
List<String> stringList = new ArrayList<>();
for (int i = 0; i < args.length; i++) {
String serverName = "";
if (i == 0) {
serverName = "-service";
} else if (i == 1) {
serverName = "-network";
} else if (i == 2) {
serverName = "-daemon";
}
if (!serverName.equals("")) {
stringList.add(serverName);
}
stringList.add(args[i]);
}
return stringList.toArray(new String[stringList.size()]);
}
int get_InitParams(String[] args) {
int i = 0;
System.out.println(Arrays.toString(args));
while (i < args.length - 1 && args[i].startsWith("-")) {
if (args[i].equals("-service")) {
service = args[i + 1];
i += 2;
} else if (args[i].equals("-network")) {
network = args[i + 1];
i += 2;
} else if (args[i].equals("-daemon")) {
daemon = args[i + 1];
i += 2;
} else
usage();
}
return i;
}
public static void main(String[] args) {
//监听
String service = "1200";
String network = ";225.19.19.12";
String daemon = "10.50.10.72:7500";
String subject = "cm.test";
String value = "hello world";
RvSendDemo rl = new RvSendDemo(service, network, daemon, subject, value);
}
}
测试一下,发送
接收就会实时的接收到
TIBCO RV实现局域网内的通讯接收
以上是简单的rv消息接收和发送,具体对于rv的消息实现封装和多频道接收通讯,已封装出来,具体的架构设计详情请看介绍