Spring Cloud 结合 Rabbitmq

pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

消息接收端

application.properties配置

#MQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
#定义通道mqScoreInput,只会有一台机器接收到消息
spring.cloud.stream.bindings.mqScoreInput.group=queueName
spring.cloud.stream.bindings.mqScoreInput.destination=exchangeName
#消息转换
spring.cloud.stream.bindings.mqScoreInput.contentType=application/json

定义接口

/**
 * 定义接口
 * @author 向振华
 * @date 2018/11/14 13:54
 */
public interface ReceiverChannel {

    String SCORE_INPUT = "mqScoreInput";

    @Input(ReceiverChannel.SCORE_INPUT)
    SubscribableChannel scoreInput();
}

接收消息(进行绑定) 

/**
 * 进行绑定
 * @author 向振华
 * @date 2018/11/14 13:55
 */
@Component
@EnableBinding({ReceiverChannel.class})
public class ReceiverServerConfig {

    @StreamListener(ReceiverChannel.SCORE_INPUT)
    public void receive(Object o) {
        //如果需要接受指定实体类,这里Object换成实体对象
        System.out.println("receive接收消息:"+o);
    }

//    /*转发*/
//    @SendTo(/*其他通道*/)
//    @StreamListener(/*接受通道*/)
//    public String sendTo(Object o) {
//        return "sendTo";
//    }

}

消息发送端

application.properties配置

#MQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
#定义通道mqScoreOutput
spring.cloud.stream.bindings.mqScoreOutput.destination=exchangeName
#消息转换
spring.cloud.stream.bindings.mqScoreOutput.contentType=application/json

定义接口

/**
 * 定义接口
 * @author 向振华
 * @date 2018/11/14 13:51
 */
public interface SendChannel {

    String SCORE_OUPUT = "mqScoreOutput";

    @Output(SendChannel.SCORE_OUPUT)
    MessageChannel scoreOutput();
}

进行绑定

/**
 * 进行绑定
 * @author 向振华
 * @date 2018/11/14 13:52
 */
@EnableBinding(SendChannel.class)
public class SendServerConfig {
}

消息发送者

/**
 * 注入可以发送消息的bean
 * @author 向振华
 * @date 2018/11/14 13:52
 */
@Service
public class SendServer {

    @Autowired
    private SendChannel sendChannel;

    @Autowired
    @Qualifier("mqScoreOutput")
    private MessageChannel messageChannel;

    public boolean sendMsg(String msg) {
        Message<String> message = MessageBuilder.withPayload(msg).build();
        return sendChannel.scoreOutput().send(message);
    }

    public boolean sendMsg2(String msg) {
        Message<String> message = MessageBuilder.withPayload(msg).build();
        return messageChannel.send(message);
    }

    public boolean sendList(String msg){
        List<String> m = Lists.newArrayList(msg+1, msg+2, msg+3);
        Message<List<String>> message = MessageBuilder.withPayload(m).build();
        return sendChannel.scoreOutput().send(message);
    }

}

测试

/**
 * @author 向振华
 * @date 2018/11/14 13:57
 */
@RequestMapping("/test")
@RestController
public class TestController {

    @Autowired
    private SendServer sendServer;

    @GetMapping("/sendMsg")
    @ResponseBody
    public Boolean sendMsg(String msg){
        return sendServer.sendMsg(msg);
    }

    @GetMapping("/sendList")
    @ResponseBody
    public Boolean sendList(String msg){
        return sendServer.sendList(msg);
    }
}

需要先在本地安装rabbitmq

猜你喜欢

转载自blog.csdn.net/Anenan/article/details/84066953