我写一个简单的Rabbitmq生产者与Spring启动2.2.7。
在代理端,我设置了一个直接交换示例,一个名为samples的队列。默认值,并将它们绑定在一起添加示例。默认绑定键。
运行应用程序时,我得到以下错误
Attempting to connect to: [127.0.0.1:5672]
2020-05-14 15:13:39.232 INFO 28393 --- [nio-8080-exec-1] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#2f860823:0/SimpleConnection@3946e760 [delegate=amqp://open-si@127.0.0.1:5672/, localPort= 34710]
2020-05-14 15:13:39.267 ERROR 28393 --- [ 127.0.0.1:5672] o.s.a.r.c.CachingConnectionFactory : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange '"samples"' in vhost '/', class-id=60, method-id=40)
rabbitmq服务器配置是正确的,因为我有一个python生产者已经成功地将消息放入“samples.default”队列。
在SpringBoot中,我使用了jackson序列化,但我认为这不是这里的问题,因为我在没有Jakson序列化配置的情况下测试了代码,问题仍然是一样的。
我的代理配置是在应用程序中设置的。特性:
#spring.rabbitmq.host=localhost
spring.rabbitmq.addresses=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=xxxx
spring.rabbitmq.password=xxxx
broker.exchange = "samples"
broker.routingKey = "samples.default"
请注意,使用Spring。兔子。主机不工作,因为它会导致使用我的internet提供商地址!
在BrokerConf配置类中:
@Configuration
public class BrokerConf {
@Bean("publisher")
MessagePublisher<BaseSample> baseSamplePublisher(RabbitTemplate rabbitTemplate) {
return new MessagePublisher<BaseSample>(rabbitTemplate);
}
@Bean
public RabbitTemplate rabbitTemplate(final ConnectionFactory connectionFactory) {
final var rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(producerJackson2MessageConverter());
return rabbitTemplate;
}
@Bean
public MessageConverter producerJackson2MessageConverter() {
return new Jackson2JsonMessageConverter();
}
}
发布者基类为:
@Component
public class MessagePublisher<T> {
private static final Logger log = LoggerFactory.getLogger(MessagePublisher.class);
private final RabbitTemplate rabbitTemplate;
public MessagePublisher(RabbitTemplate r) {
rabbitTemplate = r;
}
public void publish(List<BaseSample> messages, String exchange, String routingKey) {
for (BaseSample message: messages) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
}
}
}
我用在Rest控制器上
private static final Logger logger = LoggerFactory.getLogger(SamplesController.class);
@Autowired
private MessagePublisher<BaseSample> publisher;
@Value("${broker.exchange}")
private String exchange;
@Value("${broker.routingKey}")
private String routingKey;
@PutMapping(value = "/new", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SampleAck> add(@RequestBody List<BaseSample> samples) {
publisher.publish(samples, exchange, routingKey);
return ResponseEntity.ok(new SampleAck(samples.size(), new Date()));
}
因此,代理连接正常,但找不到交换
并且rabbitmq资源存在
xxxxxx@xxxxxxx:~/factory/udc-collector$ sudo rabbitmqctl list_exchanges
Listing exchanges for vhost / ...
name type
amq.topic topic
amq.rabbitmq.trace topic
amq.match headers
amq.direct direct
amq.fanout fanout
direct
amq.rabbitmq.log topic
amq.headers headers
samples direct
xxxx@xxxxx:~/factory/udc-collector$ sudo rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name messages
samples.default 2
任何想法?
提前感谢。
错误似乎很明显:
vhost中不交换“样本”
broker.exchange = "samples"
broker.routingKey = "samples.default"
删除引号
broker.exchange=samples
broker.routingKey=samples.default
我知道这个问题以前有人问过,但我找不到任何合适的解决办法,因此再次张贴。 我只有一个简单的producer类,它使用上面的amqpTemplate发送一条消息。但当我尝试运行我的生产者应用程序时,我得到的只是:在vhost“/”错误中没有exchange“my.exchange” 如果你能在这方面提供帮助,我将不胜感激。多谢了。
我正在编写一个ELF分析器,但我在正确转换endianness时遇到了一些问题。我有一些函数来确定分析器的endianness和目标文件的endianness。 基本上,有四种可能的情况: 在big-endian对象文件上运行的big-endian编译分析器 什么都不需要转换 字节顺序需要交换,但ntohs/l()和htons/l()都是big-endian机器上的空宏,因此它们不会交换字节顺序。
Install $ npm install vhost API var vhost = require('vhost') vhost(hostname, handle) Create a new middleware function to hand off request to handle when the incoming host for the request matches h
问题内容: 在Python中,我已经看到使用此语法交换了两个变量值: 这是否被认为是交换两个变量值的标准方法,还是有其他一些习惯上最常用的交换两个变量的方法? 问题答案: Python从左到右计算表达式。请注意,在评估分配时,右侧的评估先于左侧。 http://docs.python.org/3/reference/expressions.html#evaluation-order 这意味着该表达
问题内容: 我有一个带有坐标的MySQL表,列名称为X和Y。现在我想交换此表中的列值,以使X成为Y,Y成为X。最明显的解决方案是重命名列,但是我不想进行结构更改,因为我不一定有这样做的权限。 这可能以某种方式与 UPDATE 有关吗? UPDATE表SET X = Y,Y = X 显然不会满足我的要求。 编辑:请注意,我上面提到的权限限制有效地阻止了ALTER TABLE或其他更改表/数据库结构的
问题内容: 我有一个按钮 我无法通过ID或名称找到它,需要提交表格。 我尝试这样做:或者,WebDriver在每个元素上都有便捷的方法“提交”。如果在表单中的元素上调用此方法,则WebDriver将在DOM上移动,直到找到封闭的表单,然后在该表单上调用Submit。如果元素不是表单,则将引发NoSuchElementException:element.submit() http://seleniu