Springboot統合rabbitmq簡単な使用

3728 ワード

第一歩はまず頼りになることだ

        org.springframework.boot
        spring-boot-starter-amqp

ステップ2では、プロファイルで構成します.
#     rabbitmq    springboot   
spring.application.name=SpringBootRabbitMQ
​
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/graduation_info
​
#rabbitmq    
rabbitmq.exchange=springBoot_exchange
rabbitmq.queue=springBoot_queue
rabbitmq.routingkey=key_direct
#rabbitmq    
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true

ステップ3では、rabbitmqのconfig構成クラスを構成します.
@Configuration
public class RabbitConfig {
    @Value("${rabbitmq.queue}")
    public  String QUEUE_NAME;
    @Value("${rabbitmq.exchange}")
    public  String EXCHANGE_NAME;
    @Value("${rabbitmq.routingkey}")
    public  String ROUTING_KEY;
​
    //   queue
    @Bean
    public Queue queue() {;
        Map configMap = new HashMap<>();
        configMap.put("exchange", EXCHANGE_NAME);
        configMap.put("routing-key", ROUTING_KEY);
        configMap.put("x-message-ttl", 10000);
        return new Queue(QUEUE_NAME, true, false, false, configMap);
    }
​
​
//       exchange
    @Bean
    public DirectExchange exchange() {
        return new DirectExchange(EXCHANGE_NAME, true, false);
    }
​
    //   routing_key
    @Bean
    public Binding binding() {
        return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY);
    }
}

ステップ4、送信クラスを作成します
@Component
@Slf4j
public class RabbitMqSend implements RabbitTemplate.ConfirmCallback{
    private RabbitTemplate rabbitTemplate;
    @Autowired
    RabbitConfig rabbitConfig;
    private RabbitAdmin rabbitAdmin;
    @Autowired
    public RabbitMqSend(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
        rabbitTemplate.setConfirmCallback(this);
    }
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if (!ack) {
            log.error("Sending RabbitMQ Object ERROR" );
        }else {
            log.info("    ");
        }
    }
    /*         rabbitmq   */
    public void sendMessage(final String message) throws IllegalArgumentException {
        log.info("send message");
        rabbitTemplate.send(rabbitConfig.EXCHANGE_NAME, rabbitConfig.ROUTING_KEY, buildMessage(message.getBytes()));
    }
    public static Message buildMessage(byte[] value) {
        return MessageBuilder.withBody(value)
                .setMessageId(
                        "collection-recsync-" + UUID.randomUUID().toString())
                .build();
    }
}

第五歩、もう一人の消費者listenerが消費を監視してさっぱりしなさい.
@Slf4j
@Component
public class RabbitListenerDemo {
    @RabbitListener(queues="springBoot_queue")
    public void receive(Message msg){
        log.info("     :"+new String(msg.getBody()));
    }
}

それから自分でコントロールを書いてリクエストして、最後にコンソールが送信して受信したメッセージを印刷すればOKです.
2019-05-13 16:29:24.748  INFO 69008 --- [nio-8080-exec-1] c.u.springboot.rabbitmq.RabbitMQManager  : send message
2019-05-13 16:29:24.760  INFO 69008 --- [cTaskExecutor-1] c.u.s.rabbitmq.RabbitListenerDemo        :      :"  "
2019-05-13 16:29:24.790  INFO 69008 --- [ 127.0.0.1:5672] c.u.springboot.rabbitmq.RabbitMQManager  :     

長い間やってやっと基礎を理解して、問題があったら一緒に討論することを歓迎して、最後にマンチェスター・シティはチャンピオンで、プレミアリーグは冠を守って、瓜は牛をなくして追い詰めます