Saya sedang mengerjakan pengirim pesan beban berat yang mengirimkan javax.jms.BytesMessage.

Satu utas mengambil objek khusus aplikasi dari antrian, membuat serial dan mengirimkannya sebagai BytesMessage (terbitkan ke topik tertentu).

Utas ini memiliki tepat satu sesi JMS.

Sebenarnya

// for every message
BytesMessage message = session.createBytesMessage();
message.setJMSType("MyType");
message.setStringProperty("MyProp", "val");
message.writeBytes(data);
publisher.send(message);

Dilakukan untuk setiap pesan yang akan dikirim.

Bagaimana dengan membuat hanya satu BytesMessage dan menggunakannya kembali - apakah ini mungkin/lebih berkinerja (memori, ...)?

// only once
session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
message = session.createBytesMessage();
message.setJMSType("MyType");
message.setStringProperty("MyProp", "val");
// for every message
message.clearBody();
message.writeBytes(data);
publisher.send(message);
1
sara.lano 10 Mei 2021, 15:23

1 menjawab

Jawaban Terbaik

adalah memungkinkan untuk membuat satu BytesMessage dan kemudian menghapusnya dan menulis data baru sebelum setiap pengiriman. Namun, bagaimana hal ini pada akhirnya akan berdampak pada aplikasi Anda dari perspektif kinerja akan turun ke implementasi klien JMS yang Anda gunakan.

Secara umum Anda harus menghemat sedikit sampah dengan menggunakan kembali pesan yang berarti pengumpul sampah JVM harus melakukan lebih sedikit pekerjaan, tetapi itu mungkin sebenarnya bukan hambatan untuk aplikasi Anda sehingga pada akhirnya mungkin tidak membuat perbedaan nyata. Intinya adalah Anda hanya perlu mengujinya untuk melihat perbedaannya (jika ada).

0
Justin Bertram 10 Mei 2021, 13:44