文档章节

rabbitmq学习(二)

hensemlee
 hensemlee
发布于 2018/10/19 23:08
字数 560
阅读 4
收藏 0

生产者消费者初级案列

ChannelUtils

package com.hensemlee.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.util.HashMap;
import java.util.Map;

public class ChannelUtils {

    private static final String HOST = "192.168.1.5";
    private static final int PORT = 5672;

    public static Channel getChannel(String connectionDescription) {
        try {
            ConnectionFactory factory = getConnectionFactory();
            Connection connection = factory.newConnection(connectionDescription);
            return connection.createChannel();
        } catch (Exception e) {
            throw new RuntimeException("获取Channel连接失败");
        }
    }

    private static ConnectionFactory getConnectionFactory() {
        ConnectionFactory factory = new ConnectionFactory();
        // 配置连接信息
        factory.setHost(HOST);
        factory.setPort(PORT);
        factory.setUsername("root");
        factory.setPassword("root");
        // 网络异常自动连接恢复
        factory.setAutomaticRecoveryEnabled(true);
        // 每10秒尝试重试连接一次
        factory.setNetworkRecoveryInterval(10000);

        // 设置ConnectionFactory属性信息
        Map<String, Object> propertiesMap = new HashMap<>();
        propertiesMap.put("principal", "hensemlee");
        propertiesMap.put("description", "rabbitmq入门案例");
        propertiesMap.put("emailAddress", "hensemlee@163.com");
        factory.setClientProperties(propertiesMap);
        return factory;
    }
}

Producer

package com.hensemlee.rabbitmq;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;

import java.io.IOException;

public class Producer {
    private static final String EXCHANGE_NAME = "hello_exchange";
    private static final String ROUTINGKEY_NAME = "hello_routingkey";

    public static void main(String[] args) throws IOException {
        Channel channel = ChannelUtils.getChannel("rabbitmq入门案例消息生产者");

        // 声明交换机 (交换机名, 交换机类型, 是否持久化, 是否自动删除, 是否是内部交换机, 交换机属性);
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT, true, false, false, null);

        // 设置消息属性 发布消息 (交换机名, Routing key, 可靠消息相关属性 后续会介绍, 消息属性, 消息体);
        AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).contentType("UTF-8").build();
        channel.basicPublish(EXCHANGE_NAME, ROUTINGKEY_NAME, false, basicProperties, "Hello RabbitMQ".getBytes());
    }
}

Consumer

package com.hensemlee.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer {

    private static final String EXCHANGE_NAME = "hello_exchange";
    private static final String QUEUE_NAME = "hello_queue";
    private static final String ROUTINGKEY_NAME = "hello_routingkey";

    public static void main(String[] args) throws IOException {
        Channel channel = ChannelUtils.getChannel("rabbitmq入门案例消息消费者");

        // 声明队列 (队列名, 是否持久化, 是否排他, 是否自动删除, 队列属性);
        AMQP.Queue.DeclareOk declareOk = channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        // 声明交换机 (交换机名, 交换机类型, 是否持久化, 是否自动删除, 是否是内部交换机, 交换机属性);
        channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT, true, false, false, null);
        // 将队列Binding到交换机上 (队列名, 交换机名, Routing key, 绑定属性);
        channel.queueBind(declareOk.getQueue(), EXCHANGE_NAME, ROUTINGKEY_NAME, null);
        // 消费者订阅消息 监听如上声明的队列 (队列名, 是否自动应答(与消息可靠有关 后续会介绍), 消费者标签, 消费者)
        channel.basicConsume(declareOk.getQueue(), true, "rabbitmq入门案例消费者", new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(consumerTag);
                System.out.println(envelope.toString());
                System.out.println(properties.toString());
                System.out.println("消息内容:" + new String(body));
            }
        });
    }
}

© 著作权归作者所有

共有 人打赏支持
hensemlee
粉丝 7
博文 72
码字总数 46465
作品 0
徐汇
程序员
私信 提问
#DDBMS#rabbitmq安装

考虑了下,决定以可靠性为前提,在DDBMS低层支撑架构中用上rabbitmq,像OpenStack一样以RPC为主交互 安装rabbitmq: apt-get install rabbitmq-server 安装pika库: pip install pika 相关的...

Hochikong
2015/02/28
0
0
rabbitmq-server 安装

一,安装rabbitmq-server 1.安装erlang wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm rpm --import https:/......

丿小贰丶
2018/05/08
0
0
zabbix自动发现rabbitmq

参考文档 http://blog.csdn.net/qq29778131/article/details/52537288?ticket=ST-77459-cUGNcZF1BJBtNuZoZe1i-passport.csdn.net #python脚本 一,实现功能 实现自动发现rabbitmq queue,并监......

typuc
2018/06/26
0
0
ubuntu下安装rabbitMQ

一.环境准备 rabbitMQ需要erlang语言的支持,因此需要先安装erlang语言 二.下载 http://www.erlang.org/download/optsrc17.3tar.gz 并解压 三.安装 ./configure --prefix=/home/liyixiang/e...

清风傲剑
2015/02/05
0
0
CentOS6.7系统安装RabbitMQ3.7.8集群环境

一、安装Erlang 1、RabbitMQ3.7.8 对Erlang/OTP的版本要求 RabbitMQ3.7.8 要求Erlang/OTP版本:19.3.6.4 ~ 21.0.x 这个链接(http://www.rabbitmq.com/which-erlang.html)有详细说明. 2、Erl......

静夜明灯
2018/10/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 定义新的异常

#include <iostream> #include <exception> using namespace std; struct MyException : public exception { const char * what () const throw () { return "C++ Exception"; } }; int main......

天王盖地虎626
今天
3
0
PDMan-2.1.1 发布:用心开源,免费的国产数据库建模工具(春节前最后一个版本)

一、软件介绍 PDMan 是一款开源免费的数据库模型建模工具,是PowerDesigner之外另一种更好的选择。支持Windows,Mac,Linux等操作系统,具有上手容易,使用简单的特点。 2018年获得码云GVP (Gi...

O龙猫O
今天
18
0
OSChina 周二乱弹 —— 以后我偷小鱼干养你

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @庞巴哥 :只有这节奏瞬间变得轻松。。。。。。。。。分享Talking Eyes的单曲《In the sun (Extended Version)》: 《In the sun (Extended Ve...

小小编辑
今天
461
7
多表查询

第1章 多表关系实战 1.1 实战1:省和市  方案1:多张表,一对多  方案2:一张表,自关联一对多 1.2 实战2:用户和角色 (比如演员和扮演人物)  多对多关系 1.3 实战3:角色和权限 (比如...

stars永恒
今天
9
0
求推广,德邦快递坑人!!!!

完全没想好怎么来吐槽自己这次苦逼的德邦物流过程了,只好来记一个流水账。 从寄快递开始: 2019年1月15日从 德邦物流 微信小app上下单,截图如下: 可笑的是什么,我预约的是17号上门收件,...

o0无忧亦无怖
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部