入门练习 1
pom.xml 文件配置:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
spring 核心配置文件 rabbit-context.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-1.0.xsd">
<rabbit:connection-factory id="connectionFactory" host="192.168.199.121" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="helloworld.queue"></rabbit:queue>
</beans>
生产者代码:
public class Producer {
private static ApplicationContext context;
public static void main(String[] args) {
context = new ClassPathXmlApplicationContext("rabbit-context.xml");
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
amqpTemplate.convertAndSend("helloworld.queue", "Hello World Spring amqp");
}
}
如果发送成功了,可以看到控制台显示:
信息: Created new connection: SimpleConnection@2a40cd94 [delegate=amqp://guest@192.168.199.121:5672/]
消费者代码:
public class Consumer {
private static ApplicationContext context;
public static void main(String[] args) {
context = new ClassPathXmlApplicationContext("rabbit-context.xml");
AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class);
String receiveStr = (String) amqpTemplate.receiveAndConvert("helloworld.queue");
System.out.println(receiveStr);
}
}
入门练习 2
根据 Spring 官网的 AMQP 模块写的练习:
pom.xml 片段(只用这一个片段)
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
不使用任何配置文件发送消息:
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
public class SpringRabbitDemo {
public static void main(String[] args) throws InterruptedException {
CachingConnectionFactory cf = new CachingConnectionFactory("192.168.199.121");
// RabbitAdmin 的作用感觉就是想是 Channel
RabbitAdmin admin = new RabbitAdmin(cf);
// 声明 queue
Queue queue = new Queue("liwei-spring-queue");
admin.declareQueue(queue);
// 声明交换器
TopicExchange exchange = new TopicExchange("liweiExchange");
admin.declareExchange(exchange);
String routingKey = "foo.*";
Binding binding = BindingBuilder.bind(queue).to(exchange).with(routingKey );
admin.declareBinding(binding );
/**
* 设置监听和容器
*/
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf);
Object listner = new Object(){
public void handleMessage(String foo){
System.out.println("Object 内部的方法:" + foo);
}
};
MessageListenerAdapter adapter = new MessageListenerAdapter(listner);
container.setMessageListener(adapter);
container.setQueueNames("liwei-spring-queue");
container.start();
// 发送消息
RabbitTemplate template = new RabbitTemplate(cf);
template.convertAndSend("liweiExchange","foo.bar","spring story");
Thread.sleep(1000);
container.stop();
}
}
控制台输出:
八月 26, 2015 3:59:29 下午 org.springframework.amqp.rabbit.connection.CachingConnectionFactory createBareConnection
信息: Created new connection: SimpleConnection@4f47d241 [delegate=amqp://guest@192.168.199.121:5672/]
Object 内部的方法:spring story
八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown
信息: Waiting for workers to finish.
八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown
信息: Successfully waited for workers to finish.
入门练习 3
该练习亦来自官网的 Quick Start,只不过将 Java 代码片段改成 Spring 的核心配置文件。
pom.xml 文件片段:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
Spring 核心配置文件:
<?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">
<rabbit:connection-factory id="connectionFactory" host="192.168.199.121"/>
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="wudiexchange" routing-key="foo.bar"></rabbit:template>
<rabbit:queue name="wudiQueue"></rabbit:queue>
<!-- 路由设置,将队列绑定,topic 类型 -->
<rabbit:topic-exchange name="wudiExchange">
<rabbit:bindings>
<rabbit:binding pattern="foo.*" queue="wudiQueue"></rabbit:binding>
</rabbit:bindings>
</rabbit:topic-exchange>
<!-- 监听类测试 -->
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener ref="foo" method="listen" queue-names="wudiQueue"/>
</rabbit:listener-container>
<bean id="foo" class="com.liwei.SpringRabbitmq.Foo"></bean>
</beans>
测试类文件:
通过spring 获得到连接,并发送消息。
public class TestSpringRabbitMQ {
private static AbstractApplicationContext ctx;
public static void main(String[] args) throws InterruptedException {
ctx = new ClassPathXmlApplicationContext("context.xml");
RabbitTemplate template = ctx.getBean(RabbitTemplate.class);
template.convertAndSend("Spring Rain");
Thread.sleep(1000);
ctx.destroy();
}
}
Foo 类用于监听消息:
public class Foo {
public void listen(String foo ){
System.out.println("监听的消息:" + foo);
}
}
入门练习 4
什么配置文件都不要,简简单单地发送消息和接收消息。
pom.xml 文件只用引入一个依赖。
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
注意:先运行生产者,再运行消费者。
生产者:
public class Producer {
public static void main(String[] args) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121");
AmqpAdmin admin = new RabbitAdmin(connectionFactory);
admin.declareQueue(new Queue("myqueue"));
AmqpTemplate template = new RabbitTemplate(connectionFactory);
template.convertAndSend("myqueue", "Spring Rabbitmq");
}
}
消费者:
public class Consumer {
public static void main(String[] args) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121");
AmqpAdmin admin = new RabbitAdmin(connectionFactory);
admin.declareQueue(new Queue("myqueue"));
AmqpTemplate template = new RabbitTemplate(connectionFactory);
String foo = (String) template.receiveAndConvert("myqueue");
System.out.println(foo);
}
}
入门练习 5
pom.xml
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
生产者:
public class Send {
private static AbstractApplicationContext ctx;
public static void main(String[] args) {
ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
template.convertAndSend("guangQueue","周光");
ctx.destroy();
}
}
消费者:
public class Receive {
private static AbstractApplicationContext ctx;
public static void main(String[] args) {
ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
String receiveStr = (String) template.receiveAndConvert("guangQueue");
System.out.println(receiveStr);
ctx.destroy();
}
}
Spring 的核心配置文件:
<?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">
<rabbit:connection-factory id="connFactory" host="192.168.199.121"/>
<rabbit:template id="template" connection-factory="connFactory"></rabbit:template>
<rabbit:admin connection-factory="connFactory" />
<rabbit:queue name="guangQueue"></rabbit:queue>
</beans>
入门练习 6
pom.xml
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
Spring 核心配置文件:
<?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">
<rabbit:connection-factory id="connFactory" host="192.168.199.121" />
<rabbit:template id="template" connection-factory="connFactory"></rabbit:template>
<rabbit:admin connection-factory="connFactory" />
<rabbit:queue name="kunQueue"></rabbit:queue>
</beans>
生产者代码:
public class Send {
private static AbstractApplicationContext ctx;
public static void main(String[] args) {
ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
template.convertAndSend("kunQueue","龚友坤");
ctx.destroy();
}
}
消费者代码:
public class Receive {
private static AbstractApplicationContext ctx;
public static void main(String[] args) {
ctx = new ClassPathXmlApplicationContext("rabbitmq.xml");
AmqpTemplate template = ctx.getBean(AmqpTemplate.class);
String receiveStr = (String) template.receiveAndConvert("kunQueue");
System.out.println(receiveStr);
ctx.destroy();
}
}