导入依赖

<!-- 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