使用 jms java 接收对象
Receiving objects with jms java
有人可以帮助我吗?这是我的问题:
我尝试用 jms 发送一个对象(这部分有效)并用 jms 接收它。
我的对象很简单。 3 个字符串、3 个整数和一个布尔值。
不存在连接或类似问题。我收到了物品,但好像我一件一件地收到了所有东西。
这是我的 MessageListener :
MessageListener listner = new MessageListener() {
public void onMessage(Message message) {
ObectToSend yo=null;
try {
if (message instanceof ObjectMessage) {
ObjectMessage myMessage = (ObjectMessage) message;
System.err.println("test");
yo = (ObectToSend) myMessage.getObject();
System.err.println("test2");
System.err.println(yo.entite + " " + yo.error + " " + yo.idGloreg + " " + yo.indPerso + " " + yo.nom + " " + yo.prenom + " " + yo.nom);
}
} catch (JMSException e) {
System.out.println("Caught:" + e);
e.printStackTrace();
}
}
};
我的发送部分:
Serializable ObectTest = new ObectToSend("pro", "enc", 134, 10, true, "yayaya", 0);
MessageProducer producer = session.createProducer(topic);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
ObjectMessage message = session.createObjectMessage();
message.setObject(ObectTest);
connection.start();
producer.send(message);
最后是我要发送的内容(在 receiver.java 和 sender.java 中):
public static class ObectToSend implements Serializable{
private static final long serialVersionUID = 1L;
String prenom;
String nom;
int idGloreg;
int indPerso;
boolean ok;
String entite;
int error;
ObectToSend(String prenomP, String nomP, int idGloregP, int indPersoP, boolean okP, String entiteP, int errorP){
prenom = prenomP ;
nom= nomP;
idGloreg = idGloregP;
indPerso = indPersoP;
ok = okP;
entite= entiteP;
error = errorP;
}
}
我的控制台:
test
test
test
test
test
test
test
如果有人能告诉我问题是什么,那就太好了。我不明白。我使用 topic/queue/sync/async 发送的短信效果非常好。它谈到反对和......
看来问题出在这里:
yo = (ObectToSend) myMessage.getObject();
但是.....
对于 JMS 的未来用户,我将回答我自己的问题。
JMS 文档中没有解释,因此很难找到任何信息。
我发现很多人问如何去做,但从来没有任何答案。那是因为它与 JMS 无关,而是与 Java.
相关
就是这样:
如果您想使用与
相同的 classe(对象)
ObectToSend yo = (ObectToSend) myMessage.getObject();
我的第一个对象 (yo) 来自包 com.test.jms 中的 class ObectToSend.java,我的第二个对象 (myMessage.getObject() ) 来自包 com.test.jms2。所以我有一个像 "notfoundclass" 这样的例外。并且不能投射物体。
class ObectToSend.java 应该在两个项目中。但是你不能只复制同名的粘贴(我愚蠢地做了)。
您需要为 projects/packages 中使用的 class 创建一个 jar,并将其添加到两个项目中。
这样您就可以使用完全相同的 class 而不是它的副本。而你的 2 个对象是完全一样的。
您也可以使用地图消息。实际上,您只有字符串、整数和布尔值。你实际上不需要一个对象。 MapMessage 在这里为您服务,并且简单得多。
这里有一个例子:
// create mapMessage
message = session.createMapMessage();
// Here insert variables in properties of the message
// This can be filtred with selector
message.setStringProperty("entity", entity);
message.setStringProperty("messageFrom", messageFrom);
// Here insert variables in body of the message
//This CAN'T be filtred (what you want I think)
message.setString("title", title);
message.setString("description", description);
// Get map message
MapMessage mapMessage = (MapMessage) message;
// Here get variables of your message
String title = mapMessage.getString("title");
String description = mapMessage.getString("description");
看到它有多简单了吗?
有人可以帮助我吗?这是我的问题:
我尝试用 jms 发送一个对象(这部分有效)并用 jms 接收它。 我的对象很简单。 3 个字符串、3 个整数和一个布尔值。
不存在连接或类似问题。我收到了物品,但好像我一件一件地收到了所有东西。
这是我的 MessageListener :
MessageListener listner = new MessageListener() {
public void onMessage(Message message) {
ObectToSend yo=null;
try {
if (message instanceof ObjectMessage) {
ObjectMessage myMessage = (ObjectMessage) message;
System.err.println("test");
yo = (ObectToSend) myMessage.getObject();
System.err.println("test2");
System.err.println(yo.entite + " " + yo.error + " " + yo.idGloreg + " " + yo.indPerso + " " + yo.nom + " " + yo.prenom + " " + yo.nom);
}
} catch (JMSException e) {
System.out.println("Caught:" + e);
e.printStackTrace();
}
}
};
我的发送部分:
Serializable ObectTest = new ObectToSend("pro", "enc", 134, 10, true, "yayaya", 0);
MessageProducer producer = session.createProducer(topic);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
ObjectMessage message = session.createObjectMessage();
message.setObject(ObectTest);
connection.start();
producer.send(message);
最后是我要发送的内容(在 receiver.java 和 sender.java 中):
public static class ObectToSend implements Serializable{
private static final long serialVersionUID = 1L;
String prenom;
String nom;
int idGloreg;
int indPerso;
boolean ok;
String entite;
int error;
ObectToSend(String prenomP, String nomP, int idGloregP, int indPersoP, boolean okP, String entiteP, int errorP){
prenom = prenomP ;
nom= nomP;
idGloreg = idGloregP;
indPerso = indPersoP;
ok = okP;
entite= entiteP;
error = errorP;
}
}
我的控制台:
test
test
test
test
test
test
test
如果有人能告诉我问题是什么,那就太好了。我不明白。我使用 topic/queue/sync/async 发送的短信效果非常好。它谈到反对和...... 看来问题出在这里: yo = (ObectToSend) myMessage.getObject(); 但是.....
对于 JMS 的未来用户,我将回答我自己的问题。
JMS 文档中没有解释,因此很难找到任何信息。
我发现很多人问如何去做,但从来没有任何答案。那是因为它与 JMS 无关,而是与 Java.
相关就是这样:
如果您想使用与
相同的 classe(对象)ObectToSend yo = (ObectToSend) myMessage.getObject();
我的第一个对象 (yo) 来自包 com.test.jms 中的 class ObectToSend.java,我的第二个对象 (myMessage.getObject() ) 来自包 com.test.jms2。所以我有一个像 "notfoundclass" 这样的例外。并且不能投射物体。
class ObectToSend.java 应该在两个项目中。但是你不能只复制同名的粘贴(我愚蠢地做了)。 您需要为 projects/packages 中使用的 class 创建一个 jar,并将其添加到两个项目中。
这样您就可以使用完全相同的 class 而不是它的副本。而你的 2 个对象是完全一样的。
您也可以使用地图消息。实际上,您只有字符串、整数和布尔值。你实际上不需要一个对象。 MapMessage 在这里为您服务,并且简单得多。
这里有一个例子:
// create mapMessage
message = session.createMapMessage();
// Here insert variables in properties of the message
// This can be filtred with selector
message.setStringProperty("entity", entity);
message.setStringProperty("messageFrom", messageFrom);
// Here insert variables in body of the message
//This CAN'T be filtred (what you want I think)
message.setString("title", title);
message.setString("description", description);
// Get map message
MapMessage mapMessage = (MapMessage) message;
// Here get variables of your message
String title = mapMessage.getString("title");
String description = mapMessage.getString("description");
看到它有多简单了吗?