导包 rabbitmq-client.jar //消费者 public class Consumer { public static final String queue_name = "fang"; public static final boolean autoAck = false;//是否自动确认消息 public static final boolean durable = true;//是否持久化 public static void main(String[] args) throws java.io.IOException, java.lang.InterruptedException, TimeoutException, SQLException, ClassNotFoundException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("admin"); factory.setPassword("123456"); Connection connection = factory.newConnection();//获取连接 Channel channel = connection.createChannel();//从连接中建立通道 channel.queueDeclare(queue_name, durable, false, false, null);//声明队列,参数 1.队列名称 2.是否持久化 3.是否排外?true的话只有当前channel能用 4.用完是否自动删除,5.arguments //新建交换机,参数:1.交换机名称 2.交换机类型 direct,fanout,topic ,Headers 3,是否持久化 4,无通道时,是否自动删除 5,headers类型交换机绑定时指定的键值对 channel.exchangeDeclare("abc", "topic", true, false, null); channel.queueBind(queue_name, "abc", "abc.#");//绑定交换机 .#表示通配 (.a.b.c ) .*表示后面可以通配一个(.a匹配,.a.b则不匹配) System.out.println("====监听消息===="); channel.basicQos(1); //参数1 消息分发处理。同时最多几条消息,超出了发给别的消费者 QueueingConsumer consumer = new QueueingConsumer(channel);//定义队列的消费者 channel.basicConsume(queue_name, autoAck, consumer);//监听队列 //获取消息 while (true) { Thread.sleep(500); QueueingConsumer.Delivery deliver = consumer.nextDelivery(); String message = new String(deliver.getBody()); System.out.println("Message received:" + message); channel.basicAck(deliver.getEnvelope().getDeliveryTag(), false);//手动返回确认收到 System.out.println(message); } } } //生产者public class Produce { public static final String queue_name = "fang"; public static final boolean durable = true; //消息队列持久化 public static void main(String[] args) throws java.io.IOException { ConnectionFactory factory = new ConnectionFactory(); //创建连接工厂 factory.setHost("localhost"); factory.setVirtualHost("/"); factory.setUsername("admin"); factory.setPassword("123456"); Connection connection = factory.newConnection(); //创建连接 Channel channel = connection.createChannel();//从连接创建通道 channel.queueDeclare(queue_name, durable, false, false, null); //声明消息队列,且为可持久化的 String message = "22,1"; //发送消息basicPublish(1,2,3,4) 参数: 1为交换机名称 2为交换机key值 3 表达传输的类型 4 传输的数据 || 或者1 为空,2表示channel通道名称 不经过交换机 channel.basicPublish("abc", "abc.aa", MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes()); System.out.println("Send message:" + message); channel.close(); connection.close();//关闭通道.连接 } } 和spring整合。 添加依赖<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency>
rabbitMQ.propertiesmq.host=127.0.0.1 mq.username=admin mq.password=123456 mq.port=5672 mq.vhost=/ mq.name=fangspring-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.0.xsd"> <!--rabbitMq自动监听配置--> <!--<description>rabbitmq 连接服务配置</description>--> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:rabbitMQ.properties"/> </bean> <!-- 连接配置 --> <rabbit:connection-factory id="connectionFactory" host="${mq.host}" username="${mq.username}" password="${mq.password}" port="${mq.port}" virtual-host="${mq.vhost}"/> <rabbit:admin connection-factory="connectionFactory"/> <!--声明队列--> <rabbit:queue id="test_queue" name="${mq.name}" durable="true" auto-delete="false" exclusive="false"/> <rabbit:topic-exchange name="abc" durable="true" auto-delete="false"> <rabbit:bindings> <!--设置queue匹配的匹配模式abc.#强于abc.*--> <rabbit:binding queue="test_queue" pattern="abc.*"></rabbit:binding> </rabbit:bindings> </rabbit:topic-exchange> <bean name="queueListener" class="com.rabbit.QueueListener"></bean> <!--开启监听--> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="test_queue" ref="queueListener"/> </rabbit:listener-container> </beans>
rabbitMQ 生产者、消费者、交换机 整合spring监听 DEMO
最新推荐文章于 2024-04-23 16:15:04 发布