消息发送端配置
- 导入依赖
<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();
}
}
}
然后启动消息接收端和消息发送端进行测试即可了