【发布时间】:2016-12-27 00:01:41
【问题描述】:
我已在本地计算机 (Windows 10) 上启动 RabbitMQ 服务器。 localhost:5672 上的管理面板运行良好。我已经建立了新用户,并在 java 中编写了用于发送和接收的示例项目。它适用于 localhost 和我的新建立用户的 IP 地址:
不幸的是我在我的 Android 项目中编写了相同的配置并出现错误:
12-27 00:42:04.601 4393-4393/com.gornik.sendsensors E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gornik.sendsensors, PID: 4393
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
at libcore.io.IoBridge.connectErrno(IoBridge.java:154)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
at java.net.Socket.connect(Socket.java:884)
at com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.java:47)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:822)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:778)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:868)
at com.gornik.sendsensors.SendMessages.connectAndPublishMessage(SendMessages.java:27)
at com.gornik.sendsensors.MainActivity$1.onClick(MainActivity.java:25)
at android.view.View.performClick(View.java:5702)
at android.view.View$PerformClick.run(View.java:22541)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
“connectAndPublishMessage”方法:
public static void connectAndPublishMessage(String serverIPAddress) throws IOException{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("IP ADDRESS");
factory.setUsername("NEWUSER");
factory.setPassword("USERPASSWORD");
factory.setVirtualHost("/");
factory.setPort(5672);
try {
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello world";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
Log.d("MESSAGE SENT: ", " [x] Sent '" + message + "'");
channel.close();
connection.close();
}catch(TimeoutException e){
e.printStackTrace();
}
}
您能弄清楚为什么在我的本地机器和 Android 设备上会有所不同? 如何将我的 Android 设备连接到远程 RabbitMQ 服务器?
【问题讨论】: