Spring Boot整合RabbitMQ

消息发送端配置

  • 导入依赖
 <dependency>
      	<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
  • yml配置
server:
  tomcat:
    max-threads: 10
  port: 81

spring:
  application:
    name: test-boot-rabbitmq-consumer

  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /

  • RabbitConfig代码
@Configuration
public class RabbitConfig {
    public static final String QUEEN_INFORM_EMAIL="queen_inform_email";
    public static final String QUEEN_INFORM_SMS="queen_inform_sms";
    public static final String EXCHANGE_TOPIC_INFORM="exchange_topic_inform";
    public static final String ROUTINGKEY_EMAIL="email.#.inform.#";
    public static final String ROUTINGKEY_SMS="sms.#.inform.#";
    //声明交换机
    @Bean(EXCHANGE_TOPIC_INFORM)
    public Exchange exchangeTopicInform(){
        return ExchangeBuilder.topicExchange(EXCHANGE_TOPIC_INFORM).durable(true).build();
    }

    //声明队列
    @Bean(QUEEN_INFORM_EMAIL)
    public Queue queueInformEmail(){
        return new Queue(QUEEN_INFORM_EMAIL);
    }

    @Bean(QUEEN_INFORM_SMS)
    public Queue queueInformSms(){
        return new Queue(QUEEN_INFORM_SMS);
    }

    /**
     * 队列绑定到交换机上
     */
    @Bean
    public Binding bindingEmail(@Qualifier(QUEEN_INFORM_EMAIL)Queue queue,
                                @Qualifier(EXCHANGE_TOPIC_INFORM) Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();
    }

    @Bean
    public Binding bindingSms(@Qualifier(QUEEN_INFORM_SMS)Queue queue,
                                @Qualifier(EXCHANGE_TOPIC_INFORM) Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();
    }
}

 - 消息发送

@SpringBootTest
@RunWith(SpringRunner.class)
public class DemoApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
String message=“test rabbitmq email inform”;
@Test
public void test1() {
/**
* 参数
* 交换机名称
* routingKey
*消息内容
*/
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPIC_INFORM,“email.inform”,message);
}

@Test
public void test2() {
    User user=new User();
    user.setAge(18);
    user.setName("chm");
    user.setPassword("123456");
    /**
     * 参数
     * 交换机名称
     * routingKey
     *消息内容
     */
    try {
        Message message1= MessageBuilder.withBody(new ObjectMapper().writeValueAsBytes(user)).setDeliveryMode(MessageDeliveryMode.NON_PERSISTENT)
                 .build();
        rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_TOPIC_INFORM,"sms.inform",message1);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }


}

}


消息接收端配置
引入依赖和yml配置和发送端一样,这里就不再重复了。
同时消息接收端也需要RabbitConfig,把消息发送端的RabbitConfig类拷贝过来就行了。
消息接收端还需要进行消息监听,代码如下:

@Component
public class RecieveHandler {
    @RabbitListener(queues = RabbitConfig.QUEEN_INFORM_EMAIL)
    public void recieveEmail(String message1){
        System.out.println(message1);
    }

    @RabbitListener(queues = RabbitConfig.QUEEN_INFORM_SMS)
    public void consumeMessage(@Payload byte[] message){
        try {
            //TODO:接收String
            String result=new String(message,"UTF-8");
            System.out.println(result);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

然后启动消息接收端和消息发送端进行测试即可了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值