安卓使用RabbitMQ实现发送与接收

一:功能简介

最近公司技术经理分布任务:安卓使用RabbitMQ实现发送与接收,于是写了下面的demo。如果电脑没有配置RabbitMQ,需要先去配置。【Windows安装RabbitMQ详细教程】_rabbitmq windows-CSDN博客

虚拟机中安装RabbitMQ及使用(超详细)_rabbitmq 虚拟主机-CSDN博客

二:RabbitMq简介

这里不再详细介绍,直接放链接大伙去了解。

RabbitMQ 详解-CSDN博客

三:代码的实现

效果图:

代码部分:

代码总体结构:

项目相关配置:

  • 在AndroidManifest.xml配置网络权限
  • <uses-permission android:name="android.permission.INTERNET" />
    

配置MQ相关依赖

  • 在build.gradle配置
  • implementation ("com.rabbitmq:amqp-client:5.13.0")
    implementation ("com.google.guava:guava:30.1.1-android")

到这里配置就结束了,下面是项目部分代码

MainActivity代码如下:

package com.jl.mq_demo;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;



public class MainActivity extends AppCompatActivity {



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //调用
        Start();

    }


    //MQ调用
    private void Start(){
        // 发送
        new SendMessageTask().execute("哈哈哈!真的不容易啊?");
        // 接收
        new ReceiveMessageTask().execute();
    }


}

RabbitMQHelper代码如下:

package com.jl.mq_demo;

import com.rabbitmq.client.ConnectionFactory;

/**
 * 功能: MQ配置类
 * 作者:Jin
 * 日期:2024年05月27日
 */
public class RabbitMQHelper {

    //队列名称
    public static String QUEUE_NAME = "***";
    //MQ地址
    public static final String HOST = "0.0.0.0";
    //MQ端口号 
    public static final int PORT = 5672;
    //MQ账号
    public static final String USERNAME = "admin";
    //MQ密码
    public static final String PASSWORD = "*********";

    public ConnectionFactory getConnectionFactory() {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost(HOST);
        factory.setPort(PORT);
        factory.setUsername(USERNAME);
        factory.setPassword(PASSWORD);
        return factory;
    }
}

ReceiveMessageTask代码如下:

package com.RabbitMQ;

import android.os.AsyncTask;
import android.util.Log;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

import java.io.IOException;

/**
 * 功能:MQ接收消息工具类
 * 作者:Jin
 * 日期:2024年05月27日
 */
public class ReceiveMessageTask extends AsyncTask<Void, String, Void> {
    @Override
    protected Void doInBackground(Void... voids) {
        RabbitMQHelper helper = new RabbitMQHelper();
        ConnectionFactory factory = helper.getConnectionFactory();
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            String queueName = "hello";

            // 声明队列
            channel.queueDeclare(queueName, true, false, false, null);

            // 定义消费者
            channel.basicConsume(queueName, false, new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    String message = new String(body, "UTF-8");
                    System.out.println(" [x] Received '" + message + "'");

                    // 手动确认消息
                    channel.basicAck(envelope.getDeliveryTag(), false);

                    // 在这里,可以添加处理消息的代码
                    onProgressUpdate(message);
                  //  Log.i("这是啥",message);
                }
            });

            // 保持频道打开以侦听消息。
            synchronized (this) {
                this.wait();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(String... messages) {
        // 将您的UI与接收到的消息联合使用
        System.out.println(" [x] Processed '" + messages[0] + "'");
        Log.i("接收的消息为",messages[0]);
    }
}

SendMessageTask代码如下:

package com.RabbitMQ;

import android.os.AsyncTask;
import android.util.Log;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * 功能:MQ发送消息工具类
 * 作者:Jin
 * 日期:2024年05月27日
 */
public class SendMessageTask extends AsyncTask<String, Void, Void> {
    @Override
    protected Void doInBackground(String... messages) {
        RabbitMQHelper helper = new RabbitMQHelper();
        ConnectionFactory factory = helper.getConnectionFactory();
        try (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) {
            String exchangeName = "my_exchange";
            String routingKey = "my_routing_key";
            String queueName = "hello";

            // 声明交换和停止,并约束他们
            channel.exchangeDeclare(exchangeName, "direct", true);  // durable exchange
            channel.queueDeclare(queueName, true, false, false, null);  // durable queue
            channel.queueBind(queueName, exchangeName, routingKey);

            // 以持久模式发布消息
            String message = messages[0];
            channel.basicPublish(exchangeName, routingKey,
                    new com.rabbitmq.client.AMQP.BasicProperties.Builder()
                            .deliveryMode(2)  // make message persistent
                            .build(),
                    message.getBytes("UTF-8"));
            System.out.println(" [x] Sent '" + message + "'");
            Log.i("发送的消息是",message);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

四:总结

希望大家可以给我提提意见,如果项目中有不好的地方,希望大佬们可以给我提出来。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

养乐多滋滋滋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值