先引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
使用的Spring Boot的版本是:2.0.4.RELEASE
由于Spring Boot跑单元测试的时候,也需要一个Spring Boot Application,因此我们手动构造一个,并且加入@EnableRabbit注解,
启动监听器。
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.core.env.StandardEnvironment; import org.springframework.amqp.rabbit.annotation.EnableRabbit; /** * 由于是基于spring boot test组件进行单元测试,需要构建一个TestApplication上下文 */ @SpringBootApplication @EnableRabbit public class TestApplication { public static void main(String[] args){ SpringApplicationBuilder builder = new SpringApplicationBuilder(); builder.environment(new StandardEnvironment()); builder.sources(TestApplication.class); builder.main(TestApplication.class); builder.run(args); } }
直接编写发送消息的测试类:
import
org.junit.Test;
import
org.springframework.amqp.core.*;
import
org.springframework.amqp.rabbit.core.RabbitAdmin;
import
org.springframework.amqp.rabbit.core.RabbitTemplate;
import
org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.boot.test.context.SpringBootTest;
import
org.junit.runner.RunWith;
import
org.springframework.test.context.junit4.SpringRunner;
@RunWith
(SpringRunner.
class
)
@SpringBootTest
(classes = TestApplication.
class
)
public
class
SpringBootMqSendTest{
private
final
static
String EXCHANGE_NAME =
"hello_fanout_1"
;
private
final
static
String QUEUE_NAME =
"hello_queue_1"
;
@Autowired
private
RabbitAdmin rabbitAdmin;
@Autowired
private
RabbitTemplate rabbitTemplate;
@Test
public
void
testSend(){
FanoutExchange fanoutExchange =
new
FanoutExchange(EXCHANGE_NAME,
false
,
false
);
Queue queue =
new
Queue(QUEUE_NAME,
false
);
rabbitAdmin.declareExchange(fanoutExchange);
rabbitAdmin.declareQueue(queue);
rabbitAdmin.declareBinding(BindingBuilder.bind(queue).to(fanoutExchange));
Message message =
new
Message(
"hello world."
.getBytes(),
new
MessageProperties());
rabbitTemplate.send(EXCHANGE_NAME,
""
, message);
}
}
编写消息消费者:
import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class SpringBootMsqConsumer { @RabbitListener(queues = "hello_queue_1") public void receive(Message message) { System.out.println("receive message:" + new String(message.getBody())); } }
编写消息测试类:
import org.junit.Test; import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.junit.runner.RunWith; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class) public class SpringBootMqConsumerTest { @Autowired private SpringBootMsqConsumer springBootMsqConsumer; @Test public void testConsumer(){ } }
执行testConsumer方法后,控制台输出:receive message:hello world.