Android和Java上的RabbitMQ

Alv*_*mez 12 java android rabbitmq

我正在尝试重现可以在RabbitMQ主页中找到的Java发布者的第一个示例.

首先,我用Java做了它并且工作正常.然后,我在Android上尝试了它,这里是奇怪部分的来源.

我手动添加了我在Java程序中使用的jar库,这些库是在RabbitMQ教程中建议的.也就是说amqp-client-5.4.1,slf4j-api-1.7.21并将slf4j-simple-1.7.22其添加到/libs目录中,然后在buid.gradle (module:app)命令中引用implementation files('libs/amqp-client-5.4.1.jar'),依此类推.

然后,我在我的MainActivity.java文件中添加了所需的包依赖项,而没有遇到任何错误.但是,在添加应该发布数据的代码片段时,找不到导入库的不同方法,例如,factory因为它没有该方法setHost.

我附上我正在使用的代码.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

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

public class MainActivity extends AppCompatActivity {

    String QUEUE_NAME = "hello";
    ConnectionFactory factory = new ConnectionFactory();

    factory.setHost("192.0.0.0"); //Marked as error
    factory.setUsername("test");
    factory.setPassword("test");
    Connection connection;
    Channel channel;
    connection = factory.newConnection();
    channel = connection.createChannel();

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    String message = "Example3";
    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    System.out.println(" [x] Sent '" + message + "'");
    channel.close();
    connection.close();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
Run Code Online (Sandbox Code Playgroud)

有关为什么这段代码在Java上运行良好但是这些库无法在Android中正确导入的任何想法?

Ben*_*oit 9

在java中,您不能拥有方法之外的代码.您所能做的就是初始化班级成员.恕我直言,这不是一个罐子导入问题.

试试这个:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

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

public class MainActivity extends AppCompatActivity {

    String QUEUE_NAME = "hello";
    ConnectionFactory factory = new ConnectionFactory();

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

    private void init() {
        try {
            factory.setHost("192.0.0.0");
            factory.setUsername("test");
            factory.setPassword("test");
            Connection connection;
            Channel channel;
            connection = factory.newConnection();
            channel = connection.createChannel();

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);
            String message = "Example3";
            channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
            System.out.println(" [x] Sent '" + message + "'");
            channel.close();
            connection.close();
        } catch (IOException | TimeoutException e) {
            throw new RuntimeException("Rabbitmq problem", e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

回到原来的问题,我没有看到任何理由为什么你手动下载所有依赖项而不是使用内置的gradle依赖项管理.

如果更新build.gradle文件中的依赖项部分,则将自动下载所需的依赖项.添加/删除/升级依赖项要容易得多.

dependencies {
    compile group: 'com.rabbitmq', name: 'amqp-client', version: '5.4.1'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.21'
    compile group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.21'
}
Run Code Online (Sandbox Code Playgroud)