rabbitMQ简单实例

**
 * 消息发送
 */
public class Send {
    //创建队列的名称
    private final static String QUEUE_NAME="queue";
 
    public static void main(String[] args) {
        /**
         * 创建连接
         */
        ConnectionFactory conn = new ConnectionFactory();
 
        //连接rabbitmq的主机
        conn.setHost("10.1.8.126");
        conn.setPort(5672);
        conn.setUsername("rabbitadmin");
        conn.setPassword("123456");
        conn.setVirtualHost("/");
 
        try {
            //创建一个新的连接
            Connection connection = conn.newConnection();
 
            //创建一个频道
            Channel channel = connection.createChannel();
 
            //指定一个队列
            channel.queueDeclare(QUEUE_NAME,false,false,false,null);
 
            //指定发送的消息
            String send = "hello world";
 
            //往队列中发送一条消息
            channel.basicPublish("",QUEUE_NAME,null,send.getBytes());
            System.out.println("发送的消息:"+send);
 
            //关闭频道
            channel.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


/**
 * 消息接收
 */
public class Recv {
    //创建队列的名称
    private final static String QUEUE_NAME="queue";
 
    public static void main(String[] args) {
        /**
         * 创建连接
         */
        ConnectionFactory conn = new ConnectionFactory();
 
        //连接rabbitmq的主机
        conn.setHost("10.1.8.126");
        conn.setVirtualHost("/");
        conn.setPort(5672);
        conn.setUsername("rabbitadmin");
        conn.setPassword("123456");
 
        try {
            //创建一个新的连接
            Connection connection = conn.newConnection();
 
            //创建一个频道
            Channel channel = connection.createChannel();
 
            //指定一个队列  主要为了防止消息接收者先运行,队列还没创建
            channel.queueDeclare(QUEUE_NAME,false,false,false,null);
            System.out.println("等待消息发送过来");
 
            //创建消息队列消费者
            QueueingConsumer consumer = new QueueingConsumer(channel);
 
            //指定消费队列
            channel.basicConsume(QUEUE_NAME,true,consumer);
 
            //创建一个队列阻塞方法
            while (true){
                //内部实现是阻塞队列的take方法
                QueueingConsumer.Delivery delivery = consumer.nextDelivery();
 
                //接收消息
                String message = String.valueOf(delivery.getBody());
 
                System.out.println("消费者接收消息"+message);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
 
    }
}
### 使用 RabbitMQ 创建简单的发布者-消费者项目 为了创建一个简单的基于 RabbitMQ 的发布者-消费者应用程序,可以按照以下方式构建两个独立的 .NET 控制台应用来分别作为消息发送方 (Publisher) 和接收方 (Consumer)[^3]。 #### 发布者(Publisher) 首先创建名为 `Send` 的控制台程序: ```bash dotnet new console --name Send mv Send/Program.cs Send/Send.cs ``` 编辑后的 `Send.cs` 文件内容如下所示: ```csharp using System; using System.Text; using RabbitMQ.Client; class Send { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; 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(); } } ``` 这段代码定义了一个向队列 `"hello"` 中发送一条字符串消息的功能。 #### 消费者(Consumer) 接着创建名为 `Receive` 的控制台程序: ```bash dotnet new console --name Receive mv Receive/Program.cs Receive/Receive.cs ``` 编辑后的 `Receive.cs` 文件内容如下所示: ```csharp using System; using System.Text; using RabbitMQ.Client; using RabbitMQ.Client.Events; class Receive { public static void Main() { var factory = new ConnectionFactory() { HostName = "localhost" }; using(var connection = factory.CreateConnection()) using(var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "hello", durable: false, exclusive: false, autoDelete: false, arguments: null); 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(); } } } ``` 此部分实现了监听指定队列中的新消息,并打印到终端窗口中显示出来。 通过上述操作即可完成基本的消息传递机制设置,在实际部署之前还需要启动 RabbitMQ 服务实例。这可以通过 Docker Compose 命令轻松实现[^1]: ```bash docker-compose up -d ``` 之后可以在浏览器访问管理界面以监控节点状态以及各项资源利用率指标等信息[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值