# Connection RabbitMQ

RabbitMQ là một phần mềm cho phép xây dựng Message Queue theo protocol AMQP và khá thông dụng trên thế giới. Để kết nối đến RabbitMQ trên Python, ta sẽ sử dụng thư viện `pika`.

## Cài đặt

Có thể xem thêm về hướng dẫn cài đặt thư viện này tại <https://pika.readthedocs.org/en/0.10.0/>

Đơn giản cài thông qua `pip` là:

```
$ sudo pip install pika
```

## Gởi một message đến Server - Provider

Ví dụ để gởi một message đến server

#### Ví dụ:

```python
import pika

connection = pika.BlockingConnection(pika.Connectio
nParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')

channel.basic_publish(exchange = '', routing_key = 'hello', body = 'Hello World!')
print " [x] Sent 'Hello World!'"

connection.close()
```

Để gởi một message, chúng ta cần kết nối đến server và khai báo một channel, ở đây là channel có tên là hello . Sau khi khai báo channel, tao tiến hành gởi message có nội dung `Hello World!` thông qua channel này, kèm theo khai báo `routing_key` là `hello` . Routing Key sẽ giúp điều hướng message này đến đúng các worker được khai báo nhận message theo routing key (Consumer)

## Nhận message - Consumer

Ở bước trước, ta đã tạo một message lên queue. Ở bước này, ta sẽ khai báo một worker xử lý các message nhận được từ channel `hello`.

```python
import pika

connection = pika.BlockingConnection(pika.Connectio
nParameters(host = 'localhost'))
channel = connection.channel()

channel.queue_declare(queue = 'hello')

print ' [*] Waiting for messages. To exit press CTR L+C'

def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)

channel.basic_consume(callback, queue = 'hello', no_ack = True)

channel.start_consuming()
```

Đoạn code này cũng có phần khai báo `connection`, `channel`. Tuy nhiên, vì là consumer nên sẽ sử dụng phương thức `basic_consume` để lắng nghe trên queue hello , khi có message đến sẽ gọi hàm `callback()` để xử lý. Trong trường hợp ví dụ này thì callback chỉ đơn giản là hiển thị chuỗi thông báo đã nhận được message.

## Tìm hiểu thêm về RabbitMQ và Pika

Nội dung chương này không có ý định giới thiệu tất cả khái niệm của AMQP cũng như RabbitMQ mà chủ yếu giới thiệu thư viện `pika` để làm việc với RabbitMQ. Bạn có thể tiếp tục theo dõi các hướng dẫn về khái niệm của RabbitMQ và Pika tại website chính thức của RabbitMQ.

Tham khảo thêm tại: <https://www.rabbitmq.com/tutorials/tutorial-one-python.html>

## Follower me

* **Facebook**: [https://www.facebook.com/lamsaodecode](https://www.facebook.com/100013678592616)
* **Blog:** <https://lamsaodecode.blogspot.com>
* **Github:** <https://lamsaodecode.github.io/introduction>
