springboot RabbitMq json

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
import org.springframework.amqp.rabbit.annotation.RabbitListenerConfigurer;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistrar;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory;
import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory;

/**
 * 使用json格式传送消息
 */
@Configuration
@ConditionalOnClass(RabbitTemplate.class)
public class RabbitJsonConfigurer implements RabbitListenerConfigurer {


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

    @Bean
    public Jackson2JsonMessageConverter producerJackson2MessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Override
    public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
        registrar.setMessageHandlerMethodFactory(messageHandlerMethodFactory());
    }

    @Bean
    MessageHandlerMethodFactory messageHandlerMethodFactory() {
        DefaultMessageHandlerMethodFactory messageHandlerMethodFactory = new DefaultMessageHandlerMethodFactory();
        messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter());
        return messageHandlerMethodFactory;
    }

    @Bean
    public MappingJackson2MessageConverter consumerJackson2MessageConverter() {
        return new MappingJackson2MessageConverter();
    }
}
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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfig {

    /**
     * 家人实名认证交换机名称
     */
    public static final String FAMILY_MEMBER_REAL_NAME_AUTH = "gmHealthPatientCenter_familyMemberRealNameAuth";

    @Bean
    public TopicExchange familyMemberRealNameAuthTopicExchange() {
        return new TopicExchange(FAMILY_MEMBER_REAL_NAME_AUTH);
    }

//    @Bean
//    public Queue familyMemberRealNameAuthTestQueue() {
//        return new Queue("familyMemberRealNameAuthTest");
//    }

//    @Bean
//    Binding bindingExchangeFamilyMemberRealNameAuth(Queue familyMemberRealNameAuthTestQueue, TopicExchange familyMemberRealNameAuthTopicExchange) {
//        return BindingBuilder.bind(familyMemberRealNameAuthTestQueue).to(familyMemberRealNameAuthTopicExchange).with("*");
//    }
}

import cn.hutool.core.lang.UUID;
import com.wjj.application.healthpatient.infrastructure.config.RabbitMqConfig;
import com.wjj.common.common.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

@Configuration
@Slf4j
@RestController
public class TempTest1 implements ApplicationListener {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    private RabbitTemplateCallback rabbitTemplateCallback;

    @RequestMapping("t1")
    public Response t1() {
        String uuid = UUID.fastUUID().toString();
        HashMap<String, Object> map = new HashMap<>();
        map.put("k1", RandomStringUtils.random(10, true, true));
        map.put("k2", RandomStringUtils.random(10, true, true));
        map.put("k3", "汉字测试");
        map.put("uuid",uuid);
        MessagePostProcessor messagePostProcessor = message -> {
            message.getMessageProperties().setMessageId(uuid);
            return message;
        };
        rabbitTemplate.convertAndSend(RabbitMqConfig.FAMILY_MEMBER_REAL_NAME_AUTH, "routingKey-todo", map, messagePostProcessor,new CorrelationData(uuid));
        return Response.ok(map);
    }

    @RabbitListener(queues = {"familyMemberRealNameAuthTest"}, concurrency = "1")
    public void processMessage(Message message) {
        log.info("收到消息 messageId:{} msg:{}", message.getMessageProperties().getMessageId(), new String(message.getBody()));
    }


    @Component
    public static class RabbitTemplateCallback implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {
        @Override
        public void confirm(CorrelationData correlationData, boolean ack, String cause) {
            if (ack) {
                // 消息发送成功
                System.out.println("Message sent successfully: " + correlationData.getId());
            } else {
                // 消息发送失败
                System.out.println("Message sent failed: " + cause);
            }
        }

        @Override
        public void returnedMessage(org.springframework.amqp.core.Message message, int replyCode, String replyText,
                                    String exchange, String routingKey) {
            // 消息被退回 当消息发送给Exchange后,Exchange路由到Queue失败时处理
            System.out.println("Message returned: " + message.getBody());
        }
    }

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //spring.rabbitmq.publisher-confirm-type=correlated
        //spring.rabbitmq.publisher-returns=true
        this.rabbitTemplate.setConfirmCallback(rabbitTemplateCallback);
        this.rabbitTemplate.setReturnCallback(rabbitTemplateCallback);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,非常感谢您的提问!以下是 Spring Boot 集成 RabbitMQ 的示例: 1. 添加 Maven 依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 2. 编写 RabbitMQ 配置类: ``` @Configuration public class RabbitMQConfig { @Value("${spring.rabbitmq.host}") private String host; @Value("${spring.rabbitmq.port}") private int port; @Value("${spring.rabbitmq.username}") private String username; @Value("${spring.rabbitmq.password}") private String password; @Value("${spring.rabbitmq.virtual-host}") private String virtualHost; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setAddresses(host + ":" + port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); connectionFactory.setVirtualHost(virtualHost); return connectionFactory; } @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory()); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } @Bean public Queue queue() { return new Queue("my-queue"); } @Bean public DirectExchange exchange() { return new DirectExchange("my-exchange"); } @Bean public Binding binding() { return BindingBuilder.bind(queue()).to(exchange()).with("my-routing-key"); } } ``` 3. 编写生产者: ``` @Service public class RabbitMQProducer { @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend("my-exchange", "my-routing-key", message); } } ``` 4. 编写消费者: ``` @Service public class RabbitMQConsumer { @RabbitListener(queues = "my-queue") public void handleMessage(String message) { System.out.println("Received message: " + message); } } ``` 以上就是 Spring Boot 集成 RabbitMQ 的示例,请根据实际需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值