Springboot 集成 RabbitMq(注解版)

1:pom中引入相关的依赖

    
      org.springframework.cloud
      spring-cloud-stream-binder-rabbit
    

2:配置文件中加入对应的配置

# mq配置
#添加类型
spring.cloud.stream.binders.rabbit.type = rabbit
#IP地址
spring.cloud.stream.binders.environment.spring.rabbitmq.host = 
#端口
spring.cloud.stream.binders.environment.spring.rabbitmq.port = 
#用户名
spring.cloud.stream.binders.environment.spring.rabbitmq.username = 
#密码
spring.cloud.stream.binders.environment.spring.rabbitmq.password = 

#生产者对应的配置
spring.cloud.stream.bindings.my-test-mq-producer.destination = my.test.topic
spring.cloud.stream.bindings.my-test-mq-producer.content-type = application/json
spring.cloud.stream.bindings.my-test-mq-producer.binder = rabbit
spring.cloud.stream.rabbit.bindings.my-test-mq-producer.producer.routing-key-expression = my.test.key

#消费者对应的配置
spring.cloud.stream.bindings.my-test-mq-customer.destination = my.test.topic
spring.cloud.stream.bindings.my-test-mq-customer.content-type = application/json
spring.cloud.stream.bindings.my-test-mq-customer.binder = rabbit
spring.cloud.stream.bindings.my-test-mq-customer.group = my.test
spring.cloud.stream.rabbit.bindings.my-test-mq-customer.consumer.binding-routing-key = my.test.key
spring.cloud.stream.rabbit.bindings.my-test-mq-customer.consumer.queueNameGroupOnly = true

3:生产者

  创建生产者需要的配置类

import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;

/**
 * @Description TODO
 * @author:一尘
 * @Date:2020/6/8 17:51
 */
public interface MySource {
    /**
     * 发送邮件
     */
   //这个要和配置文件中的生产者设置的一直
    String MY_TEST_MQ_PRODUCER = "my-test-mq-producer";

    @Output(MY_TEST_MQ_PRODUCER)
    MessageChannel confirmReceipt();
}

生产者服务

import com.qishucai.sc.quote.mq.pp.PPSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @Classname MyProducer 
 * @Description TODO
 * @author:yangmeng
 * @Date:2020/6/8 17:58
 */
@Slf4j
//绑定
@EnableBinding(MySource.class)
@Component
public class MyProducer {

    @Resource
    private MySource mySource;


  //QuoteEmailMsgDTO 为你要往消息队列里面要放的实体 
    public void sendMessage(QuoteEmailMsgDTO msgDTO){
        mySource.confirmReceipt().send(MessageBuilder.withPayload(msgDTO).build());
    }


    @Async 
   //异步注解 需要在启动类上加上@EnableAsync 才能生效
    public void sendDeliveryMsg(QuoteEmailMsgDTO quoteEmailMsgDTO){

        sendMessage(quoteEmailMsgDTO);
    }


}

使用生产者生产消息

    //注入
    @Resource
    private MyProducer myProducer;

  //调用生产者生产消息
    public void test(QuoteEmailMsgDTO quoteEmailMsgDTO ) {
    

        myProducer.sendDeliveryMsg(quoteEmailMsgDTO);
    }

4:消费值

 消费者所需的配置类

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;

/**
 * 
 * @author:yicheng
 * @Date:2020/6/2 20:47
 */
public interface MySink {
    /**
     * 确认订单
     */
    String SC_QUOTE_EMAIL_CREATE_INPUT = "my-test-mq-customer";


    @Input(SC_QUOTE_EMAIL_CREATE_INPUT)
    SubscribableChannel scEmailCreate();

}

消费者

import com.alibaba.fastjson.JSONObject;
import com.qishucai.pp.common.service.EmailInfoService;
import com.qishucai.pp.quote.listener.ScSink;
import com.qishucai.pp.quote.listener.model.QuoteEmailMsgDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

@Slf4j
@Component
#绑定消费者配置类
@EnableBinding(MySink.class)
public class MyCustomer {

 

    @Transactional
    @StreamListener(value = ScSink.MY_TEST_MQ_CUSTOMER)
    public void onMessage(String message) throws Exception {
        try {
            log.info("receive   message :{}",message);
            QuoteEmailMsgDTO quoteEmailMsgDTO = JSONObject.parseObject(message, QuoteEmailMsgDTO.class);

        
        } catch (Exception ex) {
            log.error("receive  message :{} exception:{}", message, ex);
        }
    }


}

 

你可能感兴趣的:(微服务~~sprintboot)