RabbitMQ之Producer(一)

本文主要介绍了RabbitMQ的Producer使用,包括RabbitMQ-java-client的版本3.6.15,API的介绍,特别是如何实现消息和队列的持久化。通过设置`channel.queueDeclare()`和`basicProperties()`确保消息的持久性,但即使如此,仍存在数据丢失的风险,如服务节点宕机等。此外,讨论了 Publisher Confirm模式,该模式在消息写入磁盘后发送确认,提供了一种提高可靠性的方法。
摘要由CSDN通过智能技术生成

RabbitMQ-java-client版本

  1. com.rabbitmq:amqp-client:4.3.0
  2. RabbitMQ版本声明: 3.6.15

API介绍

  1. Connection FactoryConnectionChannel都是RabbitMQ对外提供的API中最基本的对象。ConnectionRabbitMQ的socket连接,它封装了socket协议相关部分逻辑。Connection Factory则是Connection的制造工厂,Connection是用来开启Channel的,AMQP协议层面的操作是通过Channel进行的。

  2. 代码示例

    private Logger logger = LoggerFactory.getLogger("rabbitmq-producer");
        @Test
        public void testDirectExchange(){
          
    
            ConnectionFactory factory = new ConnectionFactory();
    
    
            String userName = "jannal";
            String password = "jannal";
            String virtualHost = "jannal-vhost";
            String queueName = "jannal.direct.queue";
            String exchange = "jannal.direct.exchange";
            String routingKey = "SMS";
            String bindingKey = "SMS";
            String hostName = "jannal.mac.com";
            int portNumber = 5672;
    
    
            factory.setUsername(userName);
            factory.setPassword(password);
            factory.setVirtualHost(virtualHost);
            factory.setHost(hostName);
            factory.setPort(portNumber);
            //以上等价下面
            //factory.setUri("amqp://jannal:jannal@jannal.mac.com:5672/jannal-vhost");
    
            factory.setAutomaticRecoveryEnabled(false);
    
            Connection conn = null;
            try {
          
                //创建连接
                conn = factory.newConnection();
                //通过连接创建通道
                Channel channel = conn.createChannel();
                //持久化
                boolean durable = true;
                //独占
                boolean exclusive = false;
                //是否自动删除
                boolean autoDelete = false;
                //声明队列
                channel.queueDeclare(queueName, durable, exclusive, autoDelete, null);
                //声明交换器,direct交换器类型下,RoutingKey与BindingKey需要完全匹配
                channel.exchangeDeclare(exchange, "direct", true);
                //绑定
                channel.queueBind(queueName, exchange, bindingKey);
    
                 //无法路由时,消息处理方式。true返回给Producer,false则直接丢弃消息
                
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值