我想写一个应用程序,其中我需要一个生产者使用spring boot rabbitmq发送消息,接收器是用python编写的。接收器部分很简单 -
receive.py
#!/usr/bin/env python
import pika
import sys
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='topic_logs',
exchange_type='topic')
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue
binding_keys = sys.argv[1:]
if not binding_keys:
sys.stderr.write("Usage: %s [binding_key]...\n" % sys.argv[0])
sys.exit(1)
for binding_key in binding_keys:
channel.queue_bind(exchange='topic_logs',
queue=queue_name,
routing_key=binding_key)
print(' [*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] %r:%r" % (method.routing_key, body))
channel.basic_consume(callback,
queue=queue_name,
no_ack=True)
channel.start_consuming()
如何为此编写一个spring boot rabbitmq发送者代码?那里有什么必要的东西要宣布?请帮忙。
答案 0 :(得分:1)
Spring Boot首先是Java应用程序。
所以,你需要熟悉那种语言。
选择是正确的:你真的可以从Java发送到RabbitMQ并从任何其他客户端的队列中接收。
Spring Boot为您提供了RabbitTemplate
bean。因此,如果故事即将发送,您只需要注入这样的bean并使用其API发送:
@Autowired
RabbitTemplate rabbitTemplate;
...
this.rabbitTemplate.convertAndSend("topic_logs", binding_key, data);
有关详细信息,请参阅Reference Manual。
答案 1 :(得分:0)
使用spring集成,首先需要创建一个配置类:
@Configuration
public class RabbitConfig {
@Autowired
private ConnectionFactory connectionFactory;
@Bean
DirectExchange dropfileExchange() {
return new DirectExchange("exchange_name", true, false);
}
@Bean
public Queue dropfileQueue() {
return new Queue("queue_name", true);
}
@Bean
Binding dropfileExchangeBinding(DirectExchange dropfileExchange, Queue dropfileQueue) {
return BindingBuilder.bind(dropfileQueue).to(dropfileExchange).with("key_name");
}
@Bean
public RabbitTemplate dropfileExchangeTemplate() {
RabbitTemplate rt = new RabbitTemplate(connectionFactory);
rt.setExchange("exchange_name");
rt.setRoutingKey("key_name");
rt.setConnectionFactory(connectionFactory);
return rt;
}
@Bean
public RabbitMessagingTemplate rabbitMessagingTemplate() {
return new RabbitMessagingTemplate(dropfileExchangeTemplate());
}
}
然后创建一个网关服务:
@MessagingGateway
public interface DropfileMessageGateway {
@Gateway(requestChannel = "channel_name")
void generate(String payload);
}
然后使用Java DSL指定生产者流程,如下所示:
@Bean
public IntegrationFlow toOutboundQueueFlow() {
return IntegrationFlows.from("channel_name")
.transform(Transformers.toJson())
.handle(Amqp.outboundAdapter(rabbitConfig.dropfileExchangeTemplate())).get();
}
这将从通道读取消息,将其转换为JSON,然后使用出站适配器将其分配给兔子交换。
请注意,消息通过消息传递网关进入通道,因此两者中的通道名称应相同。
不要忘记包含适当的依赖项。