pom.xml
<dependencies>
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
千万不要添加原本的rabbitmq依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.2</version>
</dependency>
否则会出现创建Bean对象失败的错误
Exception in thread “main” org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘template’: Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.amqp.rabbit.core.RabbitTemplate] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
log4j
log4j.rootLogger=DEBUG,Console,Stdout
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.appender.Stdout = org.apache.log4j.DailyRollingFileAppender
log4j.appender.Stdout.File = logs/log.log
log4j.appender.Stdout.Append = true
log4j.appender.Stdout.Threshold = DEBUG
log4j.appender.Stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
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">
<!--1 定义RabbitMQ连接工厂-->
<rabbit:connection-factory id = "connectionFactory"
host="127.0.0.1"
port="5672"
username="guest"
password="guest"
virtual-host="/" />
<!--2 定义RabbitMQ模板,指定连接工厂以及定义exchange-->
<rabbit:template id="template" connection-factory="connectionFactory" exchange="fanoutExchange"/>
<!--MQ的管理,对队列,交换机等进行声明-->
<rabbit:admin connection-factory="connectionFactory"/>
<!--队列,自动声明-->
<rabbit:queue name="myQueue" auto-declare="true" durable="true"/>
<!--交换机,自动声明-->
<rabbit:fanout-exchange name="fanoutExchange" auto-declare="true" durable="true">
<rabbit:bindings>
<rabbit:binding queue="myQueue"/>
</rabbit:bindings>
</rabbit:fanout-exchange>
<!--消费者监听队列-->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="myConsumer" method="listen" queue-names="myQueue"/>
</rabbit:listener-container>
<bean id="myConsumer" class="org.myself.rabbitmq.springRabbitmq.MyConsumer"/>
</beans>
生产者
通过方法convertAndSend
发送消息
public class MyProduct {
public static void main(String[] args) throws InterruptedException {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("classpath:rabbitmq.xml");
RabbitTemplate template = ac.getBean("template",RabbitTemplate.class);
//发送消息
template.convertAndSend("Spring msg");
Thread.sleep(100);
}
}
消费者
使用Spring框架非常简单,只需要在xml中指定监听方法即可。
public class MyConsumer {
public void listen(String msg) {
System.out.println("消费者监听" + msg);
}
}