Home > Blockchain >  rabbitmq is not creating queue automatically when spring boot publisher send msg
rabbitmq is not creating queue automatically when spring boot publisher send msg

Time:11-25

rabbitmq is not creating queue automatically when spring boot publisher send msg ... i did it this way so it is without manual configuration and this is my configuration ///////rabbitmq is not creating queue automatically when spring boot publisher send msg ... i did it this way so it is without manual configuration and this is my configuration

package com.hariri_stocks.MQ;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;


public class msgConfiguration {

    
    public static final String ROUTING_KEY1 = "routingKey1";
    public static final String STOCKS_EXCHANGE = "stocks_exchange";
    public static final String STOCKS_QUEUE = "stocks_queue";
    @Bean
    public Queue queue() {
        return new Queue(STOCKS_QUEUE , false);
    }
    @Bean
    public TopicExchange exchange() {
        return new TopicExchange(STOCKS_EXCHANGE );
    }
    @Bean
    public Binding binding()
    {
        return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY1);
    }
    @Bean
    public MessageConverter converter()
    {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public AmqpTemplate template(ConnectionFactory cf) {
        final RabbitTemplate rt = new RabbitTemplate(cf);
        rt.setMessageConverter(converter());
        return rt;
    }
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

package com.hariri_stocks.MQ;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Givver {

    @Autowired
    private RabbitTemplate template;
    
    @GetMapping("/msg")
    public String send() {
        msgStatus m = new msgStatus("ok","damn");
        template.convertSendAndReceive(msgConfiguration.STOCKS_EXCHANGE, msgConfiguration.ROUTING_KEY1,m);
        return "ok";
    }
}
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

enter image description here

spring.datasource.url=jdbc:mysql://localhost:3306/hariri_stocks
spring.datasource.username=root
spring.datasource.password=

spring.thymeleaf.enabled=true
spring.thymeleaf.check-template-location=true

spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true 
spring.jpa.show-sql=true

server.port=9091
spring.application.name=hariri
<iframe name="sif3" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

CodePudding user response:

Class msgConfiguration needs to be annotated with @Configuration for those beans to be added to the application context.

Also you don't need the template bean - Spring Boot will auto wire the converter bean into its auto-configured RabbitTemplate.

  • Related