rabbitmq - 想要发布到远程机器上的消息队列
问题描述
我想将消息 pojo 从在我本地运行的 springboot 应用程序发布到消息队列驻留在远程机器之一上,但它给出了身份验证失败异常。我能够将相同的对象发布到本地的消息队列中。
我正在使用 Springbatch 读取、处理和写入消息队列。我使用了 AmqpItemWriter 并尝试发布到消息队列。它运行良好并将消息发布到我本地的消息队列中。当我将属性 spring.rabbitmq.host 从“localhost”更改为“xxx.xx.xx.xxx”时,远程机器出现了运行时异常,说明身份验证失败。
下面是我的 Writer 代码,其中我有发布到消息队列的逻辑。
@Component
public class Writer extends AmqpItemWriter<CsvWrapperPojo> {
@Autowired
@Qualifier("rabbitTemplate")
private RabbitTemplate rabbitTemplate;
public Writer(AmqpTemplate rabbitTemplate) {
super(rabbitTemplate);
// TODO Auto-generated constructor stub
}
/*@Autowired
private CSVPostProcess csvPostProcess;*/
@Override
public void write(final List<? extends CsvWrapperPojo> items) throws Exception {
// TODO Auto-generated method stub
for(CsvWrapperPojo item : items){
for(CSVPojo pojo :item.getGeneralPojoList()){
rabbitTemplate.convertAndSend("spring-boot-rabbitmq-BulkSolve.async_BulkSolve_Msg", "BulkSolve_GeneralrequestQueue", pojo);
}
for(CSVPojo pojoSummary : item.getSummaryPojoList()){
rabbitTemplate.convertAndSend("spring-boot-rabbitmq-BulkSolve_summary.async_BulkSolve_Msg", "BulkSolve_SummaryrequestQueue", pojoSummary);
}
}
}
}
下面是application.properties
server.port=9060
spring.rabbitmq.dynamic=true
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.host=xxx.xx.xx.xxx(Remote machine IP)
spring.batch.job.enabled=false
我已经安装了 Rabbitmq,并且远程机器上也可以使用相同的队列。但是这里似乎没有进行身份验证。下面是我的异常堆栈跟踪。任何人都可以建议将消息发布到远程机器需要做什么。
java.net.SocketException: Socket Closed
at java.net.SocketInputStream.socketRead0(Native Method) ~[na:1.8.0_131]
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) ~[na:1.8.0_131]
at java.net.SocketInputStream.read(SocketInputStream.java:171) ~[na:1.8.0_131]
at java.net.SocketInputStream.read(SocketInputStream.java:141) ~[na:1.8.0_131]
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_131]
at java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_131]
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) ~[na:1.8.0_131]
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:91) ~[amqp-client-4.0.3.jar!/:4.0.3]
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:164) ~[amqp-client-4.0.3.jar!/:4.0.3]
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:571) ~[amqp-client-4.0.3.jar!/:4.0.3]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
2019-05-16 15:56:41.683 ERROR 696 --- [nio-9060-exec-1] o.s.batch.core.step.AbstractStep : Encountered an error executing step ETL-CSV in job ETL
org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
at org.springframework.amqp.rabbit.support.RabbitExceptionTranslator.convertRabbitAccessException(RabbitExceptionTranslator.java:65) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:368) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:573) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1430) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1411) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.send(RabbitTemplate.java:712) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:780) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:776) ~[spring-rabbit-1.7.4.RELEASE.jar!/:na]
at com.comcast.FileProcess.Batch.Writer.write(Writer.java:47) ~[classes!/:0.0.1-SNAPSHOT]
at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:175) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:151) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:274) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:199) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330) ~[spring-batch-core-3.0.8.RELEASE.jar!/:3.0.8.RELEASE]
解决方案
guest/guest
默认情况下不允许远程。
默认情况下,guest 用户被禁止从远程主机连接;它只能通过环回接口(即本地主机)连接。无论协议如何,这都适用于连接。任何其他用户都不会(默认情况下)以这种方式受到限制。
如果您真的想允许,它继续解释如何重新配置代理。
推荐阅读
- c++ - 为什么我们需要 C++ 中的朋友关键字?
- excel - if 和 counifs 循环遍历 2500 行
- javascript - 反应原生导航 | 如何设置深色主题
- .net-core - 404 尝试将上游路径路由到 Ocelot 中的下游路径
- angular - 为什么我的 Angular 服务没有在 @Component 注释的提供者参数中指定它们就可以工作?
- python - Python:如何过滤具有 D 项和 D 之前的任何项的 ID
- c# - DataGridView 选择行并分配 CurrentRow
- visual-studio-code - 语法高亮在 Linux 上的 Visual Studio Code 中的任何文件中都不起作用
- java - 我在 Room 上出现“外键不匹配”错误的原因是什么?
- jenkins - Jenkins Pipeline - 无法卷曲向 MSTeams Webhook 发送消息