Для работы с сообщением используется класс MQMessage. Данный класс позволяет считывать и записывать информацию в прикладную часть сообщения и его заголовок.
Запись и чтение прикладной части сообщения осуществляется через потоки при помощи методов вида readXXX (чтение) и writeXXX (запись). Данные методы определены в стандартных Java-интерфейсах DataInput и DataOutput.
Ниже приводятся прототипы некоторых методов:
// Прочитать все сообщение в двоичном виде
public void readFully(byte[] b) throws IOException;
// Прочитать целое число
public int readInt() throws IOException;
// Прочитать строку
public String readLine() throws IOException;
// Прочитать заданное количество символов
public String readString(int length) throws IOException;
// Записать целое число
public void writeInt(int v) throws IOException;
// Записать строку
public void writeString(String s) throws IOException;
Вот еще несколько полезных методов, поддерживаемых классом MQMessage.
// Очистить прикладные данные
public void clearMessage() throws IOException;
// Позиционирование на заданную позицию внутри сообщения
public void seek(int offset) throws EOFException;
// Пропустить заданное количество байт
public int skipBytes(int n) throws IOException, EOFException;
// Возвращает оставшееся количество байт в сообщении
public int getDataLength() throws IOException;
// Возвращает текущую позицию в сообщении
public int getDataOffset() throws IOException;
// Возвращает длину прикладной части сообщения
public int getMessageLength() throws IOException;
Параметры заголовка сообщения описывается классом MQMD.
Класс MQMessage унаследован от класса MQMD и содержит поля, позволяющие работать с заголовком сообщения, в частности:
• messageID – уникальный идентификатор сообщения (byte[])
• correlationID – идентификатор связи, позволяет объединить несколько сообщений в группу (byte[])
• format – формат прикладной части сообщения (String)
• messageType – тип сообщения (int)
• persistence – «постоянство» сообщения (int) – определяет, будет ли сообщение сохранено на жесткий диск при записи в очередь, или оно будет зраниться в оперативной памяти
• priority (int) – приоритет сообщения
В данной лабораторной работе не предполагается изменение полей заголовка сообщения.
// формирование сообщения
MQMessage m = new MQMessage();
String s = "This is a test message";
m.writeInt(s.length());
m.writeString(s);
// обработка прочитанного сообщения
int l = m.readInt();
String s = m.readString(l);
System.out.print(s);
|