# spring-boot-starter-stream-rabbit
**Repository Path**: kancy666/spring-boot-starter-stream-rabbit
## Basic Information
- **Project Name**: spring-boot-starter-stream-rabbit
- **Description**: spring-boot-starter-stream-rabbit
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2020-03-08
- **Last Updated**: 2021-01-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring-boot-starter-stream-rabbit
### 介绍
spring-boot-starter-stream-rabbit
- 自定义消息:ChannelMessage
- 自定义消息转换器:MessageConverter
- 自定义异常处理器:ExceptionHandler
- 自定义消息处理器:MessageHandler
### 使用说明
#### 1. 引入依赖
```xml
com.kancy
spring-boot-starter-stream-rabbit
${version}
```
#### 2. 添加配置
- 定义RabbitMq的基本内容:交换机,队列,绑定路由
```properties
#定义命名空间
stream.rabbit.project=test
#定义交换机
stream.rabbit.exchange.schedule.name=test.schedule
stream.rabbit.exchange.schedule.type=direct
#定义队列,并且绑定交换机
stream.rabbit.binding-queue.polling.name=test.schedule.polling
stream.rabbit.binding-queue.polling.exchange-name=test.schedule
stream.rabbit.binding-queue.polling.routing-key=polling
#定义队列,并且绑定交换机
stream.rabbit.binding-queue.five-seconds.name=test.schedule.five-seconds
stream.rabbit.binding-queue.five-seconds.exchange-name=test.schedule
stream.rabbit.binding-queue.five-seconds.routing-key=five-seconds
stream.rabbit.binding-queue.five-seconds.dlx-exchange-name=test.schedule
stream.rabbit.binding-queue.five-seconds.dlx-routing-key=polling
stream.rabbit.binding-queue.five-seconds.ttl=5s
#配置Rabbitmq连接信息
spring.rabbitmq.host=kancy.top
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=****
spring.rabbitmq.virtual-host=/test
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true
```
- 定义channel
```yaml
stream.rabbit:
channel:
polling:
binding-key: polling
concurrency: 2
consumer:
user-message:
message-handler: user
five-seconds:
binding-key: five-seconds
```
#### 3.自定义ChannelMessage
```java
/**
* PollingChannelMessage
*
* @author kancy
* @date 2020/3/8 16:51
*/
@ChannelKey("polling")
public class PollingChannelMessage extends AbstractChannelMessage {
}
```
#### 4.定义对应消息的处理器
```java
/**
* UserMessageHandler
*
* @author kancy
* @date 2020/3/8 20:22
*/
@Component
public class UserMessageHandler implements MessageHandler {
private static Logger log = LoggerFactory.getLogger(UserMessageHandler.class);
/**
* 监听消息
*
* @param payload
* @throws Exception
*/
@Override
public void onMessage(User payload) {
log.info("接收信息:{}" , payload);
}
}
```
#### 5.发送消息
```java
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {RabbitMessageChannelAutoConfiguration.class, RabbitAutoConfiguration.class, UserMessageHandler.class})
@ActiveProfiles({"test"})
public class MessageChannelServiceTests {
@Autowired
private MessageChannelService messageChannelService;
@Test
public void sendPollingChannelMessageTest(){
ChannelMessage channelMessage = new PollingChannelMessage();
channelMessage.setMessageType("user-message");
channelMessage.setPayload(new User());
messageChannelService.sendMessage(channelMessage);
}
@Test
public void sendMessageTest(){
// 手动指定channelKey
String channelKey = "five-seconds";
ChannelMessage channelMessage = new SimpleChannelMessage(channelKey);
channelMessage.setMessageType("user-message");
channelMessage.setPayload(new User());
messageChannelService.sendMessage(channelMessage);
}
}
```