rabbitmq使用记录

官网

https://www.rabbitmq.com/

在官网上能找到遇到的所有问题,前提是英文能看懂。

Spring集成rabbitmq

https://docs.spring.io/spring-amqp/docs/current/reference/html/#introduction

 

自己项目中使用记录,消息模型为第五种TOPIC

官方代码参考地址:https://www.rabbitmq.com/api-guide.html

pom坐标

<!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

生产者代码

    private Connection connection;
	private Channel channel;

	@Value("${spring.rabbitmq.exchangeName}")
	private String exchangeName;
	@Value("${spring.rabbitmq.host}")
	private String host;
	@Value("${spring.rabbitmq.port}")
	private int port;
	@Value("${spring.rabbitmq.virtual-host}")
	private String virtualHost;
	@Value("${spring.rabbitmq.username}")
	private String userName;
	@Value("${spring.rabbitmq.password}")
	private String password;



public void init() {
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost(host);
		factory.setPort(port);
		factory.setVirtualHost(virtualHost);
		factory.setUsername(userName);
		factory.setPassword(password);
		try {
			connection = factory.newConnection();
			channel = connection.createChannel();
			channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC, false);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TimeoutException e) {
			e.printStackTrace();
		}
	}

public void send(String msg) {
		String rk1 = "a12.b34.c56";
		try {
			channel.basicPublish(exchangeName, rk1, null, msg.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

消费者代码

    private Connection connection;
   	private Channel channel;

	@Value("${spring.rabbitmq.exchangeName}")
	private String exchangeName;
	@Value("${spring.rabbitmq.host}")
	private String host;
	@Value("${spring.rabbitmq.port}")
	private int port;
	@Value("${spring.rabbitmq.virtual-host}")
	private String virtualHost;
	@Value("${spring.rabbitmq.username}")
	private String userName;
	@Value("${spring.rabbitmq.password}")
	private String password;


    //test
   	String rk1 = "a12.b34.c56";

public void init() {
		ConnectionFactory factory = new ConnectionFactory();
		factory.setHost(host);
		factory.setPort(port);
		factory.setVirtualHost(virtualHost);
		factory.setUsername(userName);
		factory.setPassword(password);
		try {
			connection = factory.newConnection();
			channel = connection.createChannel();
			channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC, false);
			//绑定交换机
			queueName = channel.queueDeclare().getQueue();
			channel.queueBind(queueName, exchangeName, rk1);

		} catch (IOException e) {
			e.printStackTrace();
		} catch (TimeoutException e) {
			e.printStackTrace();
		}
	}


public void addRoutingKey(String routingKey) throws IOException {
		channel.queueBind(queueName, exchangeName, routingKey);
	}

	public void queueUnbind(String routingKey) throws IOException {
		channel.queueUnbind(queueName, exchangeName, routingKey);
	}

public void startReceive() {
		try {
			channel.basicConsume(queueName, true, (tag, message) -> {
				//收到消息
				System.out.println("receive message: " + tag + "  " + new String(message.getBody(), "UTF-8"));
				System.out.println("routingkey:" + message.getEnvelope().getRoutingKey());
			}, (tag) -> {
				//
				System.out.println("receive message: " + tag);
			});
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值