Skip to content

Commit

Permalink
SH-7 Add hello world tutorial
Browse files Browse the repository at this point in the history
  • Loading branch information
Onur Ozgur OZKAN committed Apr 20, 2014
1 parent 801dd02 commit 922af47
Show file tree
Hide file tree
Showing 2 changed files with 170 additions and 17 deletions.
41 changes: 24 additions & 17 deletions source/posts/2014-04-20-rabbitmq.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
---
title: RabbitMQ'ya Hızlı Bir Giriş
title: RabbitMQ ile AMQP standartında mesajlaşma sistemine hızlı bir giriş
date: 2014-04-20
author: onurozgurozkan
tags: rabbitmq, ruby, tr
tags: rabbitmq, amqp, bunny, ruby, tr
---

## RabbitMQ nedir?

RabbitMQ, [Pivotal](http://www.gopivotal.com/) firması tarafından Erlang ile geliştirilen [AMQP](http://www.amqp.org/) standartlarına göre geliştirilmiş robust mesajlaşma uygulamasıdır.
RabbitMQ, [Pivotal](http://www.gopivotal.com/) firması tarafından Erlang programlama dili ile geliştirilen [AMQP](http://www.amqp.org/) standartlarına göre geliştirilmiş robust mesajlaşma sistemidir.

## Kimler kullanmalı?

* Ölçeklenebilir uygulamalar yapmak istiyenler.
* Birden fazla uygulamayı belli bir standartta haberleştirmek isteyenler.
* Uygulamanızdaki resim işleme, rapor oluşturma gibi uzun süreç işleri arka planda yapmak isteyenler.
* Uygulamanızdaki resim işleme, rapor oluşturma gibi uzun süren işleri arka planda yapmak isteyenler.

## Öne çıkan özellikleri

Expand All @@ -23,9 +23,21 @@ RabbitMQ, [Pivotal](http://www.gopivotal.com/) firması tarafından Erlang ile g
* Geniş bir geliştirme platformunu desteklemesi
* Açık kaynaklı ve ticari desteğinin bulunması

## Terminoloji

Kurulum ve örneklere geçmeden önce RabbitMQ ve mesajlaşma ile ilgili bir kaç tanımı belirtmekte fayda vardır.

* **Producer**, mesajı gönderen taraftır. `P` ile gösterilir.
* **Queue**, mesajların biriktiği havuzdur. Bir nevi mailbox gibi düşünülebilir.
* **Consumer**, mesajı alan taraftır. `C` ile gösterilir.

NOT: Producer, Queue ve Consumerlar aynı makine üzerinde olmak zorunda değildir.

Bu örneği Ruby dilinde yapacağız. RabbitMQ'nun Ruby Client'ı olarak [Bunny](http://rubybunny.info/)'i gemini kullanabiliriz. Bunny'i kurmak için `gem install bunny` demeniz yeterlidir.

## Kurulum

Bu makalede sadece OSX için Homebrew ile kurulumu anlatılacaktır. İleri tarihde belki diğerleride eklenebilir.
Bu makalede sadece OSX için Homebrew ile kurulumu anlatılacaktır. İleri tarihde belki Ubuntu sunucularda eklenebilir.

This comment has been minimized.

Copy link
@baygunm

baygunm Apr 25, 2014

Contributor

tarihte olarak değiştirelim
sunucular da -> da ayrı yazılır

This comment has been minimized.

Copy link
@onurozgurozkan

onurozgurozkan Apr 25, 2014

Fixed. ;)


### OSX'e Homebrew ile kurulumu

Expand Down Expand Up @@ -71,21 +83,17 @@ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.rabbitmq.plist
rabbitmq-server
```

Eğer `rabbitmq-server` komutunu OSX bulamadı ise `.bash_profile` veya `.zshrc` dosyalarınızda `/user/local/sbin` yoktur. `echo $PATH` komutu ile olup olmadığını anlarsınız. Eğer yoksa `/usr/local/sbin`'i `$PATH`'inize eklemelisiniz çünkü Brew RabbitMQ'yu oraya kurmaktadır.
Eğer `rabbitmq-server` komutunu OSX bulamadı ise `$PATH`'nizde `/user/local/sbin` tanımlı olmayabilir. `echo $PATH` komutu ile olup olmadığını kontrol edebilirsiniz. Eğer yoksa `/usr/local/sbin`'i `$PATH`'inize eklemelisiniz çünkü Brew RabbitMQ'yu oraya kurmaktadır.

RabbitMQ'u serverı çalıştırdıktan sonra `http://localhost:15672/` adresinden yönetim paneline girebilirsiniz. Varsayılan ayarlarda aynı makineden bağlanabilmesi kaydı ile `guest` kullanıcı ismi ve `guest` şifresi ile bir kullanıcı tanımlanmıştır.

## Genel Tanımlar

Örneklere geçmeden önce RabbitMQ ve mesajlaşma ile ilgili bir kaç tanımı belirtmekte fayda vardır.
* URL : http://localhost:15672/
* Kullanıcı adı : guest
* Kullanıcı şifresi : guest

* **Producer**, mesajı gönderen taraftır. `P` ile gösterilir.
* **Queue**, mesajların biriktiği havuzdur. Bir nevi mailbox gibi düşünülebilir.
* **Consumer**, mesajı alan taraftır. `C` ile gösterilir.
Geliştirme ortamımızı kurduğumuza göre RabbitMQ sitesinde bulunan [altı adet örnek uygulamayı](https://www.rabbitmq.com/getstarted.html) yapmaya geçebiliriz.

NOT: Producer, Queue ve Consumerlar aynı makine üzerinde olmak zorunda değildir.

Bu örneği Ruby dilinde yapacağız. RabbitMQ'nun Ruby Client'ı olarak [Bunny](http://rubybunny.info/)'i gemini kullanabiliriz. Bunny'i kurmak için `gem install bunny` demeniz yeterlidir.
Saygılar.

## Örnek 1 - Merhaba Dünya

Expand Down Expand Up @@ -221,5 +229,4 @@ Saygılar.
### Kaynaklar

* [http://en.wikipedia.org/wiki/RabbitMQ](http://en.wikipedia.org/wiki/RabbitMQ)
* [https://www.rabbitmq.com/install-homebrew.html](https://www.rabbitmq.com/install-homebrew.html)
* [https://www.rabbitmq.com/tutorials/tutorial-one-ruby.html](https://www.rabbitmq.com/tutorials/tutorial-one-ruby.html)
* [https://www.rabbitmq.com/install-homebrew.html](https://www.rabbitmq.com/install-homebrew.html)
146 changes: 146 additions & 0 deletions source/posts/2014-04-21-rabbitmq-hello-world-ornegi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
---
title: RabbitMQ 1 - RabbitMQ ile Merhaba Dünya Örneği
date: 2014-04-21
author: onurozgurozkan
tags: rabbitmq, amqp, bunny, ruby, tr
---

Bir önceki makalemizde aşağıdaki konulardan bahsettik;

* RabbitMQ nedir?
* Özellikleri nedir?
* Kimler kullanmalıdır?
* Kurulumu nasıl yapılmalıdır?

Şimdi basit bir 'Merhaba Dünya' uygulaması ile RabbitMQ'da ilk mesajımızı gönderecek ve alacağız. Aşağıdaki grafik yapılacak işlemi gösterecektir.

![Örnek 1](articles/2013-04-20-rabbitmq-1.png)

**Mesajın gönderilmesi**

* RabbitMQ'ya bağlanmak için

```ruby
#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start
```

* Yeni bir kanal yaratmak için

```ruby
ch = conn.create_channel
```

* Yaratılan kanaldan bir queue isimlendirip mesaj göndermek için

```ruby
q = ch.queue("hello")
ch.default_exchange.publish("Hello World!", :routing_key => q.name)
puts " [x] Sent 'Hello World!'"
```

* Bağlantıyı kapatmak için

```ruby
conn.close
```

* Hepsini birleştirip `sender.rb` dosyasını oluşturalım.

```ruby
#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch = conn.create_channel

q = ch.queue("hello")
ch.default_exchange.publish("Hello World!", :routing_key => q.name)
puts " [x] Sent 'Hello World!'"

conn.close
```

**Mesajın alınması**

* RabbitMQ'a bağlanmak, yeni bir kanal açmak ve kuyruğu tanımlamak için

```ruby
#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch = conn.create_channel
q = ch.queue("hello")
```

* Mesajları dinlemek için `Bunny::Queue#subscribe` methodu kullanılır.

```ruby
begin
puts " [*] Waiting for messages. To exit press CTRL+C"
q.subscribe(:block => true) do |delivery_info, properties, body|
puts " [x] Received #{body}"
end
rescue Interrupt => _
conn.close
exit(0)
end
```

* Hepsini birleştirip `receiver.rb` dosyasını oluşturalım.

```ruby
#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch = conn.create_channel
q = ch.queue("hello")

begin
puts " [*] Waiting for messages. To exit press CTRL+C"
q.subscribe(:block => true) do |delivery_info, properties, body|
puts " [x] Received #{body}"
end
rescue Interrupt => _
conn.close
exit(0)
end
```

**Terminalden dosyaları çalıştıralım.**

Unutmayın ayrı ayrı sekmelerde çalıştıracaksınız!

```bash
$ ruby -rubygems send.rb
$ ruby -rubygems receive.rb
```

Sonuçları terminal çıktılarından görebileceğiniz gibi `http://localhost:15672/` adresinden veya terminalden `rabbitmqctl list_queues` kodu ile de görebilirsiniz.

Bundan sonraki makalemiz RabbitMQ ve iş kuyrukları üzerine olacaktır.

Saygılar.

### Kaynaklar

* [https://www.rabbitmq.com/tutorials/tutorial-one-ruby.html](https://www.rabbitmq.com/tutorials/tutorial-one-ruby.html)

0 comments on commit 922af47

Please sign in to comment.