源码地址: https://download.csdn.net/download/weixin_40461281/10321780

上一篇文章讲了RabbitMQ的安装

接下来介绍一下具体的应用

使用java + rabbitMQ实现聊天功能的demo , 非常有助于理解和上手rabbitMQ , 该demo仅限于用来学习rabbitMQ , 实际工作中实现聊天功能不推荐使用rabbitMQ

首先创建一个maven项目,然后在pom.xml文件中导入RabbitMQ的jar包

地址如下:

<dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.6.0</version></dependency>
</dependencies>

工作模式采用-工作队列 接下来具体讲解一下代码实现

首先创建一个类A 并创建连接工厂和创建一个新的连接

//创建连接工厂ConnectionFactory factory = new ConnectionFactory();//设置RabbitMQ地址factory.setHost("localhost");//连接地址factory.setUsername("guest");//用户名factory.setPassword("guest");//密码factory.setPort(5672);//端口号//创建一个新的连接final Connection connection = factory.newConnection();

然后创建线程T1用来发送消息:

//发送消息线程
Thread t1 = new Thread(new Runnable() {public void run() {//创建一个频道Channel channel = null;try {channel = connection.createChannel();//声明要关注的频道channel.exchangeDeclare("logs", "fanout");//channel.queueDeclare(QUEUE_NAME, false, false, false, null);} catch (Exception e) {e.printStackTrace();}while(true) {Scanner scan = new Scanner(System.in);System.out.println("请输入消息");String message = scan.nextLine();//发送消息到队列中try {channel.basicPublish("logs", QUEUE_NAME, null, message.getBytes());//channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));} catch (Exception e) {e.printStackTrace();}System.out.println("B发送消息:" + message);}}
});

创建T2用来监听接收消息:

//接收消息线程
Thread t2 = new Thread(new Runnable() {public void run() {Channel channel = null;try {channel = connection.createChannel();//声明要关注的频道channel.exchangeDeclare("logs", "fanout");//channel.queueDeclare(QUEUE_NAME,false,false,false,null);channel.queueBind(QUEUE_NAME, "logs", "");//创建消费者 ---- 得到消息后会自动触发Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {//body为消息体String message = new String(body, "UTF-8");System.out.println("B接收消息:" + message);}};//消息消费完成确认channel.basicConsume(QUEUE_NAME, true, consumer);} catch (Exception e) {e.printStackTrace();}}
});

最后别忘了启动两个线程:

t1.start();
t2.start();

然后我们在创建一个一模一样的类B

public class B {private final static String QUEUE_NAME = "test";public static void main(String[] args) throws Exception{//创建连接工厂ConnectionFactory factory = new ConnectionFactory();//设置RabbitMQ地址factory.setHost("localhost");//连接地址factory.setUsername("guest");//用户名factory.setPassword("guest");//密码factory.setPort(5672);//端口号//创建一个新的连接final Connection connection = factory.newConnection();//发送消息线程Thread t1 = new Thread(new Runnable() {public void run() {//创建一个频道Channel channel = null;try {channel = connection.createChannel();//声明要关注的频道channel.exchangeDeclare("logs", "fanout");//channel.queueDeclare(QUEUE_NAME, false, false, false, null);} catch (Exception e) {e.printStackTrace();}while(true) {Scanner scan = new Scanner(System.in);System.out.println("请输入消息");String message = scan.nextLine();//发送消息到队列中try {channel.basicPublish("logs", QUEUE_NAME, null, message.getBytes());//channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));} catch (Exception e) {e.printStackTrace();}System.out.println("B发送消息:" + message);}}});//接收消息线程Thread t2 = new Thread(new Runnable() {public void run() {Channel channel = null;try {channel = connection.createChannel();//声明要关注的频道channel.exchangeDeclare("logs", "fanout");//channel.queueDeclare(QUEUE_NAME,false,false,false,null);channel.queueBind(QUEUE_NAME, "logs", "");//创建消费者 ---- 得到消息后会自动触发Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {//body为消息体String message = new String(body, "UTF-8");System.out.println("B接收消息:" + message);}};//消息消费完成确认channel.basicConsume(QUEUE_NAME, true, consumer);} catch (Exception e) {e.printStackTrace();}}});t1.start();t2.start();}
}

然后分别运行两个类:

最后由于本文的demo需要持续监听 , 所以未做关闭连接

如果大家在实际中使用一定记得要关闭连接,不然小心你的内存

}finally {try {if (channel != null) {channel.close();}if (connection != null) {connection.close();}}catch (Exception e) {e.printStackTrace();}
}

好了 , 这样一个简单的一对一聊天功能就完成了

我们也可以用 -- 发布订阅模式 实现多人在线聊天 , 在这里我就不演示了,有兴趣的小伙伴可以自己做一下

好了,本篇文章就到这了

java+rabbitMQ实现一对一聊天相关推荐

  1. JAVA中webSockt一对一聊天

    JAVA中实现websockt一对一聊天 WebSocketConfig 配置 /*** 开启WebSocket支持* @author*/ @Configuration public class We ...

  2. 【Java线程】简单实现带界面的一对一聊天

    实现原理: 1.构建好窗体,在窗体中创建好相应的布局和控件: 2.为相应的控件(按钮:监听.连接.发送)添加事件: 3.使用到两个线程: a.监听线程:获取服务器端输入的端口号,构建socket,监听 ...

  3. Java网络编程,一对一聊天

    Java网络编程,一对一聊天 **这个小任务是来自于B站,他的视频名字就是"Java实现实时聊天互动程序"** 要求:就是有2个类,其中一个客户端和一个服务端.要实现从客户端发消息 ...

  4. Java websocket + redis 实现多人单聊天室,多人多聊天室, 一对一聊天

    多人,单聊天室版 FEATURE 多人聊天, 界面简洁美观, 使用ueditor支持发送文字,图片信息 群聊成员列表, 登入登出公告 存储聊天记录, 查看历史消息 技术点 使用CopyOnWriteM ...

  5. 利用websocket实现一对一聊天

    一对一聊天websocket 1. 效果展示 2. 业务分析(逻辑展示...) 3. 技术点 功能 即时发送消息||随时发送消息 历史消息显示 已读未读状态 1. 效果展示 由于没做登录,就以jack ...

  6. 一对一聊天ajax实现

    前端页面: 好友列表: 好友列表代码: <%@ page language="java" contentType="text/html; charset=UTF-8 ...

  7. Java+Springboot+Websocket在线聊天室

    1.什么是websocket? websocket是由HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯.它是一种在单个TCP连接上进行全双工通信的协议.W ...

  8. Java Swing中的聊天气泡

    本文将向您解释"如何在Java swing应用程序中绘制聊天气泡?" 聊天气泡与呼出气泡或思想气泡相同. 今天,大多数聊天应用程序都以这种格式显示转换,因此本文将帮助您在用Java ...

  9. tornado实现基于websocket的好友一对一聊天功能

    做项目的时候涉及到即时通信了,所以在 gladuo 的建议下看了一篇教程,[转]Tornado 搭建基于 WebSocket 的聊天服务,经过一番修改调试实现了功能,在此总结分享一下. 按思路来聊: ...

  10. 微信升级最新版本后,可在一对一聊天场景中访问外部链接

    9月17日消息,据微信发布的消息,近期,工信部对外链管理提出了专项指导意见,微信将落实"以安全为底线"的互联互通,为确保高质量的平台内容和良好的用户体验,整体遵循如下外链开放原则: ...

最新文章

  1. python2基础教程廖雪峰云-Python基础
  2. bzoj1230[Usaco2008 Nov]lites 开关灯*
  3. 写在2013年最后一天
  4. 宝宝的成长脚印8/27
  5. 1、登录模块测试用例
  6. 单片微机计算机原理与接口技术高峰,单片微机原理与接口技术(第2版)
  7. K-折交叉验证(原理及实现)
  8. Centos7.5安装redis
  9. 正态分布随机数产生方法
  10. Redis系列(五):Redis的过期键删除策略
  11. html如何设置ie6兼容性视图,IE6浏览器兼容性视图设置在哪里
  12. 几块钱的超声波也能仿真?ROS2仿真之添加超声波传感器
  13. 阿里开发者工具盘点:用它!让开发事半功倍
  14. 大数据或成大金融时代的奠基石
  15. python中用什么函数读取字符串_Python(2)字符串的主要方法
  16. 做网站如何申请网站空间?
  17. POJ1036 Gangsters
  18. Mysql错误1452 - Cannot add or update a child row: a foreign key constraint fails 怎么办?
  19. mysql 建表语句 及完整案例
  20. 架构设计:系统存储(20)——图片服务器:需求和技术选型(2)

热门文章

  1. 《opencv学习》Shi-Tomasi 角点检测
  2. 核密度估计_拔剑-浆糊的传说_新浪博客
  3. LaTeX 格式、字母、符号、公式 (总结)
  4. 寻找NOD32升级服务器不求人
  5. android密码设成星号,将EditText密码掩码字符更改为星号(*)
  6. 中华神话传说中神仙全表(ZZ)
  7. 有缘-无缘-惜缘-随缘
  8. Pyecharts+高德地图实现3D地图效果
  9. python +高德地图API调用
  10. 华为云安装:宝塔linux+wordpress建站