4

チュートリアルを読みました。RabbitMQ はメッセージ ブローカーであり、メッセージは文字列です。メッセージがクラスまたは構造体として定義されているという考えはありますか?それで、メッセージ構造体を定義できます。

4

1 に答える 1

4

メッセージはバイト ストリームとして送信されるため、シリアル化可能な任意のオブジェクトをバイト ストリームに変換して送信し、反対側で逆シリアル化できます。

これをメッセージ オブジェクトに入れ、メッセージが発行されたときに呼び出します。

    public byte[] toBytes() {
      byte[]bytes; 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      try{ 
        ObjectOutputStream oos = new ObjectOutputStream(baos); 
        oos.writeObject(this); 
        oos.flush();
        oos.reset();
        bytes = baos.toByteArray();
        oos.close();
        baos.close();
      } catch(IOException e){ 
        bytes = new byte[] {};
        Logger.getLogger("bsdlog").error("Unable to write to output stream",e); 
      }         
      return bytes; 
    }

これをメッセージ オブジェクトに入れ、メッセージが消費されたときに呼び出します。

public static Message fromBytes(byte[] body) {
    Message obj = null;
    try {
        ByteArrayInputStream bis = new ByteArrayInputStream (body);
        ObjectInputStream ois = new ObjectInputStream (bis);
        obj = (Message)ois.readObject();
        ois.close();
        bis.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
    return obj;     
}
于 2012-07-26T05:08:49.857 に答える