rabbitMQ之直连模型

前提是在rabbitmq中web可视化管理界面增加管理用户root,增加虚拟库/ems,以下代码方可运行成功
docker中安装rabbiMQ

docker pull rabbitmq:3-management

在docker中启动rabbitMQ命令:

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

首先学习直连模型(一对1模型):
在这里插入图片描述
在这里插入图片描述

rabbitMQ之消息发送方:

package com.example.rabbitmq;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

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

public class TestSendMessage {
	public static void main(String[] args) {
		ConnectionFactory   connectionFactoryfactory=new ConnectionFactory();
		connectionFactoryfactory.setHost("192.168.142.128");
		connectionFactoryfactory.setPort(5672);
		connectionFactoryfactory.setVirtualHost("/ems");
		connectionFactoryfactory.setUsername("root");
		connectionFactoryfactory.setPassword("root");
		Connection connection;
		try {
			//获取链对象
			connection = connectionFactoryfactory.newConnection();
			//获取链接通道
			Channel  channel=connection.createChannel();
			//参数1.为队列名称,没有创建,后面自动创建
			//参数2用来定义队列是否要持久化,true持久化,false为不持久化
			//参数3.exclusive是否独占队列,true独占队列,false不独占
			//参数4.autoDelete:是否在队列消费完成后自动删除队列,true自动删除,false不自动删除
			//参数5.额外附加参数
			channel.queueDeclare("hello", false, false, false, null);
			//参数1交换机名称,参数2队列名称,参数3.传递消息额外设置,参数4:消息的具体内容
			channel.basicPublish("", "hello", null, "hello rabbitmq".getBytes());
			channel.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TimeoutException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
}

消费者代码

//参数
		//参数1.为队列名称,没有创建,后面自动创建
		//参数2用来定义队列是否要持久化,true持久化,false为不持久化
		//参数3.exclusive是否独占队列,true独占队列,false不独占
		//参数4.autoDelete:是否在队列消费完成后自动删除队列,true自动删除,false不自动删除
		//参数5.额外附加参数
		channel.basicQos(1);   //保证通道里面只有一条消息被处理,防止数据多条的时候丢失
		channel.queueDeclare("work",true,false,false,null);
		//参数1交换机名称,参数2队列名称,参数3.传递消息额外设置,参数4:消息的具体内容
		channel.basicConsume("work", false,new DefaultConsumer(channel) {
			public void handleDelivery(String consumeTag,Envelope  envelope,AMQP.BasicProperties properties,byte[] body) throws IOException {
				System.out.println("我是接受者二="+new String(body));
				//参数1.确认队列中的具体消息;参数2:是否开启多个消息同时确定
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				channel.basicAck(envelope.getDeliveryTag(), false);
			}
		

第二种是可以把消费者在复制一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值