使用RabbitMQ让C#项目和Java项目互相发送和接收消息

PS:这只是一个测试,
rabbit是在本地的环境,先开启rabbitMQ的服务器
请添加图片描述

C#的Provider

代码是直接拿的RabbitMQ官网里的,可以直接拿来用

class Program
{

     static string QueueName = "task_queue";

     static IConnection connection;

     static void Main(string[] args)
     {
         var factory = new ConnectionFactory() { HostName = "127.0.0.1", UserName = "testUser", Password = "12345" };
         connection = factory.CreateConnection();

         Run();

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

     private static void Run()
     {
         while (true)
         {
             using (var channel = connection.CreateModel())
             {
                 channel.QueueDeclare(queue: QueueName,
                                      durable: true,
                                      exclusive: false,
                                      autoDelete: false,
                                      arguments: null);

                 var message = GetMessage(DateTime.Now.ToString("HH:mm:ss")+"I have send to you Java,Did you receive it");
                 var body = Encoding.UTF8.GetBytes(message);

                 var properties = channel.CreateBasicProperties();
                 properties.Persistent = true;

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

     private static string GetMessage(string args)
     {
         return "Hello World! " + args;
     }
}

Java的Customer

 public static void main(String[] args) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();

        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setUsername("testUser");
        factory.setPassword("12345");
       

        // 2.创建连接
        Connection connection = factory.newConnection();

        // 3.创建频道
        Channel channel = connection.createChannel();

        // 4.创建队列
        channel.queueDeclare("task_queue", true, false, false, null);

        // 5. 接收消息
        channel.basicConsume("task_queue", true, new DefaultConsumer(channel) {

                // 回调方法,当收到消息之后,会自动执行该方法
            public void handleDelivery(String consumerTag, Envelope envelope,
                                        AMQP.BasicProperties properties,byte[] body) 
                                        throws IOException {

            System.out.println("body:" + new String(body));
            }
        });
        // 不释放资源,让rabbitmq一直监听
        
    }

结果

先运行C#的Provider,
请添加图片描述
产生了一条消息
再启动Java的Customer
请添加图片描述
消息被消费掉了。
反过来也很简单,只需要注释Java的接收代码,添加发送消息的代码即可

BasicProperties properties = new BasicProperties();
        channel.basicPublish("", "task_queue", properties, "From Java Project To C#".getBytes());

C#的接收也同理

 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.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                    };
                    channel.BasicConsume(queue: QueueName,
                                         autoAck: false,
                                         consumer: consumer);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗马苏丹默罕默德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值