如何在不同的java微服务中使用相同的rabbitmq队列

时间:2018-04-12 10:33:11

标签: spring-boot rabbitmq spring-rabbit

我是Rabbitmq的新手,我的问题是我们如何为不同的消费者或不同的微服务使用相同的队列。在我的项目中,我集中了rabbitmq并创建了两个不同的spring启动应用程序。我在第一个应用程序中调用一个服务,因为它在rabbitmq中创建一个队列并且还从该队列接收消息但在我的第二个应用程序中它没有接收到该消息从队列。 anybuddy可以告诉我如何在两个不同的应用程序中调用或使用一个队列。

这是我的第一个应用程序的代码。 控制器:

@RestController
@RequestMapping(value = "/candidate-corpus/")

public class RabbitMQWebController {

@Autowired
RabbitMQSender rabbitMQSender;

@Autowired
RabbitMQReceiver rabbitMQReceiver;

@GetMapping(value = "/updater")
public String producer(@RequestParam("candName") String 
 candName,@RequestParam("candId") String candId) {

    Candidate candidate=new Candidate();
    candidate.setCandId(candId);
    candidate.setCandName(candName);
    rabbitMQSender.send(candidate);
    //rabbitMQReceiver.recievedMessage(emp);

    return "Message sent to the RabbitMQ Corpus Successfully";
 }

配置文件:

@Configuration
public class RabbitMQConfig {

@Value("${rabbitmqqueuelist.queue}")
String queueName;

@Value("${rabbitmqqueuelist.exchange}")
String exchange;

@Value("${rabbitmqqueuelist.routing-key}")
private String routingkey;

@Bean
Queue candidateUpdater1() {
    return new Queue(queueName, false);
}

@Bean
FanoutExchange xyz() {
    return new FanoutExchange(exchange);
}

@Bean
Binding binding(Queue queue, FanoutExchange exchange) {
    return BindingBuilder.bind(queue).to(exchange);
}

@Bean
public MessageConverter jsonMessageConverter() {
    return new Jackson2JsonMessageConverter();
}

@Bean
public AmqpTemplate rabbitTemplate(ConnectionFactory 
connectionFactory) {
    final RabbitTemplate rabbitTemplate = new 
 RabbitTemplate(connectionFactory);
    rabbitTemplate.setMessageConverter(jsonMessageConverter());
    return rabbitTemplate;
}

@Bean
public RabbitMQReceiver receiver() { return new RabbitMQReceiver();}

}

RabbitMqSender.java

@Service
public class RabbitMQSender {

@Autowired
private AmqpTemplate rabbitTemplate;

@Value("${rabbitmqqueuelist.exchange}")
private String exchange;

@Value("${rabbitmqqueuelist.routing-key}")
private String routingkey;

public void send(Candidate cand) {
    rabbitTemplate.convertAndSend(exchange, routingkey, cand);
    System.out.println("exchange kye"+exchange);
    System.out.println("routing key"+routingkey);
    System.out.println("cand obj. "+cand);

}
}

RabbitMq接收器:

public class RabbitMQReceiver {

@Autowired
private AmqpTemplate rabbitTemplate;

@Value("${rabbitmqqueuelist.exchange}")
private String exchange;

@Value("${rabbitmqqueuelist.routing-key}")
private String routingkey;

@RabbitListener(queues = "${rabbitmqqueuelist.queue}")
public void recievedMessage(Candidate obj) {

  // Object obj1 = rabbitTemplate.receiveAndConvert();

    System.out.println("-----------"+obj.toString());
    System.out.println("Recieved Message: " + obj.getCandName());
    System.out.println("Recieved Message: " + obj.getCandId());
 }
}

这里是application.yml文件

  rabbitmq:
  host: localhost
  port: 15672
  username: guest
  password: guest

 rabbitmqqueuelist.exchange: xyz
 rabbitmqqueuelist.routing-key: candidateUpdater
 rabbitmqqueuelist.queue: candidateUpdater1

所以上面是我的第一个应用程序代码。我正在从队列发送和接收数据,但我在运行我的第二个应用程序,因为它没有接收。任何人都可以指导我如何实现这一点。

注意:对于第二个应用程序,我使用了上面给出的相同代码。

我已经通过官方网站但无法理解,这就是我在这里问的原因

谢谢。

0 个答案:

没有答案