---
# System prepended metadata

title: RabbitMQ開發教學筆記

---

# RabbitMQ開發教學筆記

## 1.安裝說明
開啟Docker輸入
```
docker run -d --hostname myrabbit --name RabbitMQ -p 8080:15672 rabbitmq:3-management
```
![](https://i.imgur.com/he4Ci7Y.png)

在執行http://localhost:8080/#/
預設帳密都是 guest
RabbitMQ Server就開啟成功了!

![](https://i.imgur.com/UC9XWNC.png)

## 2.權限設定
按下 Add user建立receive使用者
![](https://i.imgur.com/9znnTOn.png)
點選上面qquest底下receive進入設定權限
底下兩個Set Permissions都要按
![](https://i.imgur.com/WJJyWvH.png)


## 3.Net實作
1.建立console專案分別為接收端與傳送端
![](https://i.imgur.com/Iv9aIs0.png)

接收端代碼
```


using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;

internal class Program
{
    private static void Main(string[] args)
    {
        //建立接收者連線資訊
        ConnectionFactory factory = new ConnectionFactory();
        factory.UserName = "receive";
        factory.Password = "receive";
        factory.VirtualHost = "/";
        factory.HostName = "localhost";
        factory.Port = AmqpTcpEndpoint.UseDefaultPort;
        IConnection connection = factory.CreateConnection();

        //產生通道
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);

            Console.WriteLine(" [*] Waiting for messages.");

            var consumer = new EventingBasicConsumer(channel);
            consumer.Received += (model, ea) =>
            {
                var body = ea.Body.ToArray();
                var message = Encoding.UTF8.GetString(body);
                Console.WriteLine(" [x] Received {0}", message);
            };
            channel.BasicConsume(queue: "hello", autoAck: true, consumer: consumer);

            Console.WriteLine(" Press [enter] to exit.");
            Console.ReadLine();

        }
    }
}
```
傳送端代碼
```


using RabbitMQ.Client;
using System.Text;

internal class Program
{
    private static void Main(string[] args)
    {
        ConnectionFactory factory = new ConnectionFactory();
        factory.UserName = "send";
        factory.Password = "send";
        factory.VirtualHost = "/";
        factory.HostName = "localhost";
        factory.Port = AmqpTcpEndpoint.UseDefaultPort;
        IConnection connection = factory.CreateConnection();

        //using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null);

            string message = "Hello World!";
            var body = Encoding.UTF8.GetBytes(message);

            channel.BasicPublish(exchange: "", routingKey: "hello", basicProperties: null, body: body);
            Console.WriteLine(" [x] Sent {0}", message);
        }

        Console.WriteLine(" Press [enter] to exit.");
        Console.ReadLine();
    }
}
```

## 4.實際成果
傳送端:
![](https://i.imgur.com/KkkkzdT.png)
接收端:
![](https://i.imgur.com/y76GkYh.png)

## 5.程式檔案
https://github.com/hungho0208/RabbitMQ.git