rabbitmq与spring 结合
来源:互联网 发布:怎么看是淘宝客 编辑:程序博客网 时间:2024/05/16 13:57
maven 配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.7.3.RELEASE</version>
</dependency>
非spring集成方式
消息创建者
public class Producer {
private static final String TASK_QUEUE_NAME = "fenfatest.task_queue";
public static void main(String[] args)
throws IOException, TimeoutException, java.util.concurrent.TimeoutException, InterruptedException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.231.209");
factory.setPort(5672);
factory.setUsername("test");
factory.setPassword("test");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
// 分发信息
for (int i = 0; i < 10; i++) {
String message = "Hello RabbitMQ" + i;
channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
System.out.println("NewTask send '" + message + "'");
}
channel.close();
connection.close();
}
}
消息消费者
public class Work2 {
private static final String TASK_QUEUE_NAME = "fenfatest.task_queue";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.231.209");
factory.setPort(5672);
factory.setUsername("test");
factory.setPassword("test");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
System.out.println("Worker2 Waiting for messages");
// 每次从队列获取的数量
channel.basicQos(1);
final Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println("Worker2 Received '" + message + "'");
}
};
boolean autoAck = true;
// 消息消费完成确认
channel.basicConsume(TASK_QUEUE_NAME, autoAck, consumer);
}
}
/***************************************************************************************************************************/
与spring集成
消息生产者
application-mq.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-4.3.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.7.xsd">
<description>rabbitmq 连接服务配置</description>
<!-- 连接配置 -->
<!-- 连接配置 -->
<rabbit:connection-factory id="connectionFactory" host="192.168.231.209" username="test"
password="test" port="5672" />
<rabbit:admin connection-factory="connectionFactory"/>
<!-- 消息队列客户端 -->
<rabbit:template id="amqpTemplate" exchange="mq_exchange" connection-factory="connectionFactory" />
<!-- queue 队列声明 -->
<!--
durable 是否持久化
exclusive 仅创建者可以使用的私有队列,断开后自动删除
auto-delete 当所有消费端连接断开后,是否自动删除队列 -->
<rabbit:queue id="mq_queue" name="Seckill_Queue" durable="true" auto-delete="false" exclusive="false" />
<!-- 交换机定义 -->
<!--
交换机:一个交换机可以绑定多个队列,一个队列也可以绑定到多个交换机上。
如果没有队列绑定到交换机上,则发送到该交换机上的信息则会丢失。
direct模式:消息与一个特定的路由器完全匹配,才会转发
topic模式:按规则转发消息,最灵活
-->
<rabbit:topic-exchange name="mq_exchange" durable="true" auto-delete="false">
<rabbit:bindings>
<!-- 设置消息Queue匹配的pattern (direct模式为key) -->
<rabbit:binding queue="mq_queue" pattern="Seckill_mq_patt"/>
</rabbit:bindings>
</rabbit:topic-exchange>
</beans>
java 代码
public static void main(String[] arg) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
AmqpTemplate amqpTemplate = (AmqpTemplate) context.getBean("amqpTemplate");
// convertAndSend 将Java对象转换为消息发送至匹配key的交换机中Exchange
for(int i=0;i<10;i++)
{
amqpTemplate.convertAndSend("mq_exchange", "Seckill_mq_patt", "mg"+i);
}
}
消费者配置
<?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-4.3.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.7.xsd">
<description>rabbitmq 连接服务配置</description>
<!-- 连接配置 -->
<rabbit:connection-factory id="connectionFactory" host="192.168.231.209" username="test"
password="test" port="5672" />
<rabbit:admin connection-factory="connectionFactory"/>
<!-- queue 队列声明 -->
<!--
durable 是否持久化
exclusive 仅创建者可以使用的私有队列,断开后自动删除
auto-delete 当所有消费端连接断开后,是否自动删除队列 -->
<rabbit:queue id="mq_queue" name="Seckill_Queue" durable="false" auto-delete="false" exclusive="false" auto-declare="false" />
<!-- 配置监听 消费者 -->
<rabbit:listener-container concurrency="2" connection-factory="connectionFactory" acknowledge="manual">
<!--
queues 监听队列,多个用逗号分隔
ref 监听器 -->
<rabbit:listener queues="mq_queue" ref="queueListenter"/>
</rabbit:listener-container>
</beans>
java 代码
public class QueProducer {
public static void main(String[] arg) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
@Component
public class QueueListenter implements ChannelAwareMessageListener {
public void onMessage(Message message, Channel channel) throws Exception {
// TODO Auto-generated method stub
try{
MessageConverter converter = new SimpleMessageConverter();
String mes= (String)converter.fromMessage(message);
System.out.println(mes);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}catch(Exception ex){
channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,true);
}
}
}
- rabbitmq与spring 结合
- 结合Spring,运行RabbitMQ
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- 路由模式的 RabbitMQ,以及与spring的结合
- RabbitMQ与java、Spring结合实例详细讲解
- AAA RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解
- RabbitMQ与java、Spring结合实例详细讲解(转)
- rabbitMQ结合spring框架使用
- 【RabbitMQ】RabbitMQ与Spring整合
- 使用spring-amqp结合使用rabbitmq
- EL表达式获取值错误
- select 选项跳转页面
- SpringMVC前后台传值写法
- py-faster-rcnn配置CPU下运行demo.py
- CRM系统实现企业管理高效协同
- rabbitmq与spring 结合
- org.springframework.dao.InvalidDataAccessApiUsageException: Bean object must not be null; nested exc
- java 实现 两个栈实现一个队列的功能
- 关于this的指向
- Java网络----Socket, 多线程实现内网多人聊天及一对一聊天
- AtomicInteger类的理解与使用
- 关于词云包wordcloud的安装
- Mybatis不能正确解析typeAliases问题的处理方法
- Android 学习参考博客与网站