在pom.xml
中引入如下依赖内容,其中spring-boot-starter-amqp
用于支持RabbitMQ
<!--mq-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</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 ReceiverServer {
@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_OUTPUT = "mqScoreOutput";
@Output(SendChannel.SCORE_OUTPUT)
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);
}
}
项目地址:https://github.com/xxiangzh
需要先在本地安装rabbitmq
1:安装RabbitMQ需要先安装Erlang语言开发包,直接下载地址:http://erlang.org/download/otp_win64_18.3.exe
2:安装RabbitMQ Server 直接下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9.exe
3:以管理员身份运行cmd.exe,进入目录 D:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.9\sbin(RabbitMQ Server安装目录),运行cmd命令:rabbitmq-plugins.bat enable rabbitmq_management
4:以管理员身份运行cmd.exe,运行命令:net stop RabbitMQ && net start RabbitMQ。启动RabbitMQ Server
在浏览器输入地址:http://localhost:15672,输入默认账号:guest 密码:guest。