Merhabalar ben Bunjo, bu konuda Ruby'de AMQP protokolüne bir istemci kodlamayı anlatacağım.
AMQP (Advanced Message Queuing Protocol) Nedir?
AMQP, Advanced Message Queuing Protocol'ün kısaltmasıdır. Bu protokol, uygulamalar arasında güvenilir mesajlaşma sağlamak için tasarlanmış bir ağ protokolüdür.
AMQP, mesajların değiş tokuş edilmesi, sıralanması, yönlendirilmesi ve güvenli bir şekilde iletilmesi için kullanılır.
Bu, farklı uygulamalar arasında veri alışverişi yaparken güvenilirlik, esneklik ve performans sağlar.
AMQP, birçok farklı mesajlaşma senaryosunda kullanılabilir, örneğin dağıtılmış sistemlerde, bulut bilişim ortamlarında ve finansal hizmetler gibi birçok endüstride.
Tarihçesi
AMQP, 2003 yılında Londra'daki JPMorgan Chase'ten John O'Hara tarafından oluşturuldu.[1][7] AMQP işbirlikçi bir açık çaba olarak tasarlandı. İlk tasarım, 2004 ortasından 2006 ortasına kadar JPMorgan Chase tarafından yapıldı ve bir C komisyoncusu ve protokol dokümantasyonu geliştirmek için iMatix Corporation ile sözleşme imzaladı. 2005 yılında JPMorgan Chase, Cisco Systems, IONA Technologies, iMatix, Red Hat ve Transaction Workflow Innovation Standards Team'i (TWIST) içeren bir çalışma grubu oluşturmak için diğer firmalara başvurdu. Aynı yıl JPMorgan Chase, başlangıçta Java'da ve kısa süre sonra C++'da Apache Qpid'i oluşturmak için Red Hat ile ortaklık kurdu. RabbitMQ bağımsız olarak Erlang'da Rabbit Technologies tarafından geliştirildi ve ardından Microsoft ve StormMQ uygulamaları geldi.
Çalışma grubu, aralarında Bank of America, Barclays, Cisco Systems, Credit Suisse, Deutsche Börse, Goldman Sachs, HCL Technologies Ltd, Progress Software, IIT Software, INETCO Systems Limited, Informatica (29 West dahil), JPMorgan Chase'in de bulunduğu 23 şirkete ulaştı. Microsoft Corporation, my-Channels, Novell, Red Hat, Software AG, Solace Systems, StormMQ, Tervela Inc., TWIST Process Innovations ltd, VMware (Rabit Technologies'i satın aldı) ve WSO2.
2008 yılında, iMatix'in CEO'su ve baş yazılım tasarımcısı Pieter Hintjens, "AMQP'de sorun nedir (ve nasıl düzeltilir)"[8] başlıklı bir makale yazdı ve bunu yakın bir arıza konusunda uyarıda bulunmak, sorunları belirlemek için çalışma grubuna dağıttı. iMatix tarafından görüldü ve AMQP spesifikasyonunu düzeltmenin yollarını önerdi. O zamana kadar iMatix zaten ZeroMQ üzerinde çalışmaya başlamıştı. 2010 yılında Hintjens, iMatix'in AMQP çalışma grubundan ayrılacağını ve önemli ölçüde daha basit ve daha hızlı ZeroMQ lehine AMQP/1.0'ı desteklemeyi planlamadığını duyurdu.[9]
Ağustos 2011'de AMQP çalışma grubu, OASIS üye bölümü olarak yeniden düzenlendiğini duyurdu.[10]
AMQP 1.0, AMQP çalışma grubu tarafından 30 Ekim 2011'de New York'ta bir konferansta yayınlandı. Etkinlikte Microsoft, Red Hat, VMware, Apache, INETCO ve IIT Software, birlikte çalışabilirlik gösteriminde protokolü çalıştıran yazılımı gösterdi. Ertesi gün, 1 Kasım 2011'de, AMQP'nin 1.0 versiyonunu uluslararası açık standartlar süreci yoluyla ilerletmek için bir OASIS Teknik Komitesinin kurulduğu duyuruldu[11]. OASIS'in ilk taslağı Şubat 2012'de yayınlandı;[12] Çalışma Grubu tarafından yayınlananlarla karşılaştırıldığında değişiklikler, daha fazla netlik sağlamak amacıyla yapılan düzenlemelerle sınırlıydı (işlevsel değişiklik yok). İkinci taslak, 20 Haziran'da (yine herhangi bir işlevsel değişiklik olmadan) kamu incelemesi için yayınlandı ve AMQP, 31 Ekim 2012'de OASIS standardı olarak onaylandı.[14]
...
Referans: Advanced Message Queuing Protocol - Wikipedia
Bunny İle Client Kodlamak
Kurulum:
Bash:
gem install bunny
İlk olarak, bunny kütüphanesi projeye dahil edilir. Bu kütüphane, RabbitMQ ile etkileşim kurmak için kullanılır.
Ruby:
require 'bunny'
Ardından, RabbitMQ sunucusuna bağlanmak için gerekli olan bağlantı seçenekleri belirtilir. Bu örnekte, hedef IP adresi ve bağlantı portu belirtilmiştir.
Ruby:
options = {
host: 'hedef ip adresi',
port: 5672
}
Bağlantı oluşturulur ve başlatılır.
Ruby:
connection = Bunny.new(options)
connection.start
Bağlantı üzerinden bir kanal oluşturulur. Kanal, RabbitMQ ile iletişim kurmak için kullanılır.
Ruby:
channel = connection.create_channel
Bir yayın değiş tokuşu (exchange) oluşturulur. Bu örnekte, "logs" adında bir fanout tipinde bir değiş tokuş oluşturulmuştur.
Fanout tipi, mesajları tüm bağlı kuyruklara (queues) gönderir.
Fanout tipi, mesajları tüm bağlı kuyruklara (queues) gönderir.
Ruby:
exchange = channel.fanout('logs')
Bir mesaj oluşturulur. Eğer kullanıcı bir argüman girmezse, varsayılan olarak "Merhaba Dünya!" mesajı kullanılır.
Eğer argüman girilirse, girilen argümanlar birleştirilerek tek bir mesaj oluşturulur.
Eğer argüman girilirse, girilen argümanlar birleştirilerek tek bir mesaj oluşturulur.
Ruby:
message = ARGV.empty? ? 'Merhaba Dünya!' : ARGV.join(' ')
Oluşturulan mesaj yayın değiş tokuşuna gönderilir.
Ruby:
exchange.publish(message)
Son olarak, gönderilen mesajın bilgisini konsola yazdırılır.
Ruby:
puts " [x] Sent #{message}"
Bağlantı kapatılır.
Ruby:
connection.close
Tüm Kod:
Ruby:
# tht bunjo
require 'bunny'
options = {
host: 'hedef ip adresi',
port: 5672
}
connection = Bunny.new(options)
connection.start
channel = connection.create_channel
exchange = channel.fanout('logs')
message = ARGV.empty? ? 'Merhaba Dünya!' : ARGV.join(' ')
exchange.publish(message)
puts " [x] Sent #{message}"
connection.close
Dosya Örneği:
Ruby:
# tht bunjo
require 'bunny'
options = {
host: 'ip adresi',
port: 5672,
user: 'kullanıcı adı',
password: 'sifre'
}
connection = Bunny.new(options)
connection.start
channel = connection.create_channel
exchange = channel.direct('my_channel', durable: true)
message = ARGV.empty? ? 'http://hedef ip:8080/file.zip' : ARGV.join(' ')
exchange.publish(message)
puts " [x] Sent #{message}"
connection.close
Daha fazlası için bknz.
İyi forumlar...
İyi forumlar...