20 Temmuz 2020 Pazartesi

Apache ActiveMQ

JMS
ActiveMQ aslında bir JMS'tir. Gönderilmek istenen mesaj serialization ile binary blob haline getirilir ve gönderilir.
Maven ile şöyle yaparız.
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-broker</artifactId>
  <version>5.15.12</version>
</dependency>
Şöyle çalıştırılır.
C:\apache-activemq-5.11.1>.\bin\activemq create instance1
Ancak ActiveMQ aynı zamanda Amqp protokolünü de destekler. Açıklaması şöyle.
JMS, when it was defined did not define a protocol between the JMS client and a messaging server. The JMS client, which implement the JMS API can use whatever protocol to communicate with messaging server. The client just need to be compliant with JMS api. Thats all. Ususally JMS clients use a custom protocol that their messaging server understands.

AMQP on other hand is a protocol between a messaging client and messaging server. A JMS client can use AMQP as the protocol to communicate with the messaging server. And there are clients like that available.
Eğer sadece Amqp olan bir şey arıyorsak RabbitMQ yazısına bakılabilir.

Connection Setting
ActiveMQ için connection açarken bazı ayarları vermek mümkün.
failover
Eğer tek URI varsa, tekrar bağlanır. Açıklaması şöyle.
I used failover to activate automatic reconnection if the queue becomes unreachable.
Birden fazla URI vermek için şeklen şöyle yaparız
failover:(uri1,...,uriN)?transportOptions&nestedURIOptions
initialReconnectDelay Alanı
Örnek
Şöyle yaparız
failover:(tcp://localhost:61616)?initialReconnectDelay=100&startupMaxReconnectAttempts=3
maxReconnectDelay Alanı
Örnek
Şöyle yaparız.
failover:(tcp://activemq-01:61616,tcp://activemq-02:61616)?
  randomize=false&maxReconnectDelay=3000&maxReconnectAttempts=50"
startupMaxReconnectAttempts Alanı
Eğer tek URI varsa, tekrar bağlanır. Açıklaması şöyle.
In the connection url I added startupMaxReconnectAttempts=3 in order to let the application to start, otherwise it was waiting indefinitely for the queue to be available.
Redelivery Policy
Bunlardan bir tanesi Redelivery Policy ayarı.

Per Destination Policies
Örnek
Şöyle yaparız
<policyEntry queue=">" cursorMemoryHighWaterMark="30">
  <pendingQueuePolicy>
    <fileQueueCursor />
  </pendingQueuePolicy>
</policyEntry>

Desteklenen Protokoller
Şunlar transport olarak desteklenir.
Openwire (ActiveMQ'ya mahsustur),
Amqp (Açık standart),
- Stomp,
- Mqtt,
- Ws

STOMP
ActiveMQ Stomp protokolünü kullanabilir. Stomp metin tabanlı bir protokoldür. Protokolün Connected alanı buradan görülebilir.

Frame olarak şunlar var.
CONNECT
RECIPT
SEND

Receipt Header
Açıklaması şöyle
Any client frame other than CONNECT may specify a receipt header with an arbitrary value. This will cause the server to acknowledge receipt of the frame with a RECEIPT frame which contains the value of this header as the value of the receipt-id header in the RECEIPT frame.

Kaha
Maven ile şöyle yaparız.
<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-kahadb-store</artifactId>
</dependency>
ActiveMQ Kaha dosya veritabanı sistemini kullanır. XML dosyasında şu satırlar bulunur.
<persistenceAdapter>
      <kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>

JMS Listener
Spring ile JMS listener şöyle ayarlanır.
<jms:listener-container connection-factory="myConnectionFactory"
                        ..........
                        concurrency="4-8">
 <jms:listener id="myListener" destination="myque" ref="myBean" method="method"/>
</jms:listener-container>

Hiç yorum yok:

Yorum Gönder