向Azure Event Hubs发送事件时遭遇‘Operation not permitted’错误
解决Azure Event Hubs在Android中运行时的AmqpException: Operation not permitted
在实现Azure Event Hubs Java发送功能时,遇到如下异常:
com.azure.core.amqp.exception.AmqpException: Operation not permitted, errorContext[NAMESPACE: testhandheld.servicebus.windows.net. ERROR CONTEXT: N/A] at com.azure.core.amqp.implementation.ExceptionUtil.toException(ExceptionUtil.java:85) at com.azure.core.amqp.implementation.handler.ConnectionHandler.notifyErrorContext(ConnectionHandler.java:351) at com.azure.core.amqp.implementation.handler.ConnectionHandler.onTransportError(ConnectionHandler.java:253) at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:191) at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108) at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324) at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291) at com.azure.core.amqp.implementation.ReactorExecutor.run(ReactorExecutor.java:91) at com.azure.core.amqp.implementation.ReactorExecutor.$r8$lambda$NrD3tar-eanl_T0ijanE5E0zkZY(Unknown Source:0) at com.azure.core.amqp.implementation.ReactorExecutor$$ExternalSyntheticLambda0.run(Unknown Source:2) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68) at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920) Suppressed: java.lang.Exception: #block terminated with an error at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:139) at reactor.core.publisher.Mono.block(Mono.java:1731) at com.azure.messaging.eventhubs.EventHubProducerClient.createBatch(EventHubProducerClient.java:199) at com.example.myapplication.MainActivity$1.run(MainActivity.java:40) ... 1 more
确认连接字符串已配置管理员、读取和写入权限,排查后发现问题根源是AndroidManifest.xml中未添加联网权限。
解决方案
在AndroidManifest.xml的根标签内添加以下权限声明:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Android应用默认不具备联网权限,缺少该权限会导致无法与Azure Event Hubs服务建立AMQP连接,进而触发"Operation not permitted"异常。添加权限后重新运行应用即可解决该问题。
内容的提问来源于stack exchange,提问作者Daniel Hernández
相关产品推荐
相关产品推荐

