rabbitMQ 生产者、消费者、交换机 整合spring监听 DEMO

导包 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.properties
mq.host=127.0.0.1
mq.username=admin
mq.password=123456
mq.port=5672
mq.vhost=/
mq.name=fang

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



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值