2014-01-23 2 views
1

Я хотел бы обмениваться сообщениями с клиентом в очереди jms. Что-то вроде:Интерфейс для обмена с jms

Обновленный пользователь Адрес; Полевая улица; OldValue: foo; NewValue: bar;

Каков наилучший интерфейс для обмена с клиентом? Я мог бы определить его как текст выше и отправить как TextMessage. Но это не интерфейс, который я бы предпочел.

Должен ли я обменять API на классы Java? Или использовать мыло над JMS? Каков наилучший способ?

ответ

3

Вы можете отправить текст или объекты java (которые должны реализовать интерфейс java.io.Serializable). Если вы будете использовать простой текст, попробуйте сделать его структурированным в структурированном формате xml или Json.

В противном случае использовать Java передачи объекта

Вы можете отправить текст или Java, объекты (которые должны реализовывать интерфейс java.io.Serializable). Если вы будете использовать простой текст, попробуйте сделать его структурированным в структурированном формате xml или Json.

Если вы хотите использовать java-объекты, это может сработать. Вот очень простой пример:

/*the object you will be sent to consumer*/ 
    public class MSObject implements java.io.Serializable{ 
    ...... 
    } 

    /*sending method*/ 
    private void sendObjectMessage() throws Exception { 
     ActiveMQSession mysession = (ActiveMQSession) session; 
     ObjectMessage msg = session.createObjectMessage(); 
     msg.setObject(new MSObject("first name","Jimmy")); 
     msg.setJMSType(this.CMD_TYPE_MESSAGETYPE_OBJECT); 
     producer.send(msg); 
     if (transacted) { 
      session.commit(); 
     } 
     System.out.println("The object message has been sent to " + this.subject 
       + " queue."); 
     Thread.sleep(sleepTime); 
    } 
    /*receiving method*/ 
    public void onMessage(Message message) { 

     if (message instanceof ObjectMessage) { 
     System.out.println("recevied a Object Message"); 
     ObjectMessage msg = (ObjectMessage)message; 
     MSObject obj = (MSObject)msg.getObject(); 
     System.out.println("info: "); 
     System.out.println("key: "+obj.getKey()); 
     System.out.println("value: "+obj.getValue()); 
    } 
    } 
+0

Спасибо за ваш ответ. Отправляющие объекты звучат хорошо, но затем я должен обменивать/определять их с клиентами (клиентами). Я думаю, что я иду с решением json. Даже тогда интерфейс должен быть определен (конечно), но это, возможно, самый гибкий интерфейс. Можно будет добавить новые поля, и не все клиенты будут заботиться о них. Таким образом, управление версиями также не является большой проблемой. – boskop

+0

Хорошо звучит хорошо, но вы меня спрашиваете, я бы пошел на объектный подход. Таким образом, вы избежите генерации Json с одной стороны и разбора его с другой стороны. С объектным подходом все, что вам нужно сделать, это обмен одним файлом jar, содержащим декларацию интерфейса. Вот и все. –

0

Мыльный звук, как простейшая, любая обработка xml будет работать. Я бы пошел на goob protobufs вместо этого, тогда вы могли бы отправить двоичные данные.

+0

Вы можете отправить текст или объекты java (которые должны реализовать интерфейс java.io.Serializable). Если вы будете использовать простой текст, попробуйте сделать его структурированным в структурированном формате xml или Json. –

Смежные вопросы