导入依赖
<!-- RabbitMq -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.0.1.RELEASE</version>
<!-- 这里是为了防止冲突,看情况可以选择去除或者不去除 -->
<exclusions>
<exclusion>
<artifactId>spring-context</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
spring-rabbitmq.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
<!--配置connection-factory,指定连接rabbit server参数 -->
<rabbit:connection-factory id="connectionFactory"
username="quest" password="quest" host="127.0.0.1" port="5672"/>
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
<rabbit:admin id="connectAdmin" connection-factory="connectionFactory"/>
<!--定义queue -->
<rabbit:queue name="queueName" durable="true" auto-delete="false"
exclusive="false" declared-by="connectAdmin"/>
<!-- 定义direct exchange,绑定queueTest -->
<rabbit:direct-exchange name="exchangeName"
durable="true" auto-delete="false" declared-by="connectAdmin">
<rabbit:bindings>
<rabbit:binding queue="queueName" key="Routingkey"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
<!--定义rabbit template用于数据的接收和发送 -->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="exchangeName"/>
<!-- 消息接收者 -->
<bean id="messageReceiver" class="com.abroad.rabbitmq.MessageConsumer"></bean>
<!-- queue litener 观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象 -->
<rabbit:listener-container
connection-factory="connectionFactory">
<rabbit:listener queues="queueName" ref="messageReceiver"/>
</rabbit:listener-container>
</beans>
RabbitMQ的配置写完要记得天加进主配置
<import resource="classpath:spring/spring-rabbitmq.xml"/>
消息消费者
/**
* @author 萧一旬
* @date Create in 9:14 2019/12/12
*/
public class MessageConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
try {
String messages = new String(message.getBody(), "UTF-8");
Thread.sleep(5000);
System.out.println(messages);
} catch (Exception e) {
e.printStackTrace();
}
}
}
消息发送者
@Component
public class MessageProvider {
@Resource(name = "amqpTemplate")
private AmqpTemplate amqpTemplate;
public void sendMessage(Object message) throws IOException {
amqpTemplate.convertAndSend("Routingkey", message);
}
}
可能遇见的问题
ListenerContainerFactoryBean 创建错误
这个时候修改spring-rabbitmq.xml
文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd">
↑
替换成
↓
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
这是因为spring命名空间配置版本不正确:
spring-beans-3.0.xsd --> spring-beans.xsd
spring-rabbit-1.2.xsd --> spring-rabbit.xsd