**

《 Java 项目中使用 TongLink/Q 实现消息队列传输 》

**

  • 安装服务端、并配置文档

首先,我们同样是安装它的服务器端,和其他 MQ 免安装不同,我们需要根据exe安装,不断下一步就搞定了,网上很多图例,这里不是多说了。

然后就是配置文档了,东方通官网有相应软件的使用说明,包括目录的介绍,需要重点关注的是安装目录下的 bin、etc、log、sample 等目录。
bin 是启动的 bat 文件;
etc 则是系统配置文件,我们需要修改它的tlqjndi.conf和tlsys.conf文件,建议都看下,了解下中间件启动逻辑;
log 中间件运行产生的日志文件;
sample 在具体的生产环境中的一些实例;

有关配置文件改什么,需要依据 TongLing/Q 中间件的连接地址、jndi的队列名称等进行配置。注意:必须保证 服务器 和 客户端 的配置需要保持一致。

配置详情可以到官网去查看:http://www.tongtech.com/product-series.php?id=1
如下图:

里面提供了 TongWeb(应用服务器)、TongLB(均衡负载)等,应有尽有(还包括了企业服务总线 ESB) 非常实用的。
我这儿只提供与 Java 项目相关的实现代码!!!

  • 服务端代码:

注意:发送队列名必须与 TongLing/Q 中间件启动前配置好的队列名一致。

package com.etc.send.data.utils;import java.util.Properties;import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.Queue;
import javax.jms.TextMessage;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** TongLing/Q 服务端* <p>* * @ClassName : QueueSenderUtils*            </p>*            <p>* @Description : TODO*              </p>*              <p>* @Author : HuaZai*         </p>*         <p>* @ContactInformation : 1461522031@qq.com/huazai6789@aliyun.com*                     </p>* * @Date : 2018年1月22日 上午11:24:47* @Version : V1.0.0**/
public class QueueSenderUtils {// 定义常量private static final String tcf = "tongtech.jms.jndi.JmsContextFactory";private static final String remoteURL = "tlq://192.168.78.136:10024";private static final String remoteFactory = "RemoteConnectionFactory";private static final Logger log = LoggerFactory.getLogger(QueueSenderUtils.class);public static void startSenderMsg() {ConnectionFactory ConnFactory = null;Connection conn = null;Session session = null;Queue queue = null;MessageProducer mProducer = null;TextMessage testMessage = null;try {Properties pro = new Properties();pro.setProperty("java.naming.factory.initial", tcf);pro.setProperty("java.naming.provider.url", remoteURL);javax.naming.Context ctx = new javax.naming.InitialContext(pro);ConnFactory = (javax.jms.ConnectionFactory) ctx.lookup(remoteFactory);queue = (javax.jms.Queue) ctx.lookup("MyQueue");conn = ConnFactory.createConnection();session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);mProducer = session.createProducer(queue);testMessage = session.createTextMessage("huazai");// 开启连接,并发送消息conn.start();log.info(" = = = = = = = = = 开始发送消息。。。");mProducer.send(testMessage);log.info(" = = = = = = = = = 消息发送完成。。。");// 获取发送消息的内容TextMessage msg = (TextMessage) testConsumer.receive(2000);log.info(" = = = = = = = = = 当前发送的消息内容为:" + msg.getText());} catch (Exception e) {log.info(" = = = = = = = = = 消息发送异常。。。" + e.toString());e.printStackTrace();} finally {try {if (session != null) {session.close();}if (conn != null) {conn.close();}} catch (Exception e) {log.info(" = = = = = = = = = 关闭消息连接时异常:" + e.toString());e.printStackTrace();}}}}
  • 客户端代码:
    注意:需要在项目的 Web.xml 中配置监听器来监听服务器保持连接状态,保证以下代码自启动,目的就是在 Tomcat 服务器启动时就能实现消息接收。
package com.etc.send.data.controller;import java.util.Properties;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.jms.*;
import javax.naming.*;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import com.tongtech.jms.FileMessage;
import com.etc.action.MsgSenderAction;
import com.etc.action.UserAction;
import com.etc.utils.ConfigInfo;/*** TongLing/Q 客户端* <p>* * @ClassName : QmController*            </p>*            <p>* @Description : TODO*              </p>*              <p>* @Author : HuaZai*         </p>*         <p>* @ContactInformation : 1461522031@qq.com/huazai6789@aliyun.com*                     </p>* * @Date : 2018年1月22日 上午11:57:22* @Version : V1.0.0*  */
public class QmController extends HttpServlet {// 定义变量private static final String tcf = ConfigInfo.getValue("JMSCONTEXTFACTORY");private static final String remoteURL = ConfigInfo.getValue("REMOTEURL");private static final String remoteFactory = ConfigInfo.getValue("REMOTEFACTORY");private static final String QUEUENAME = ConfigInfo.getValue("QUEUENAME");private static final Logger log = LoggerFactory.getLogger(QmController.class);@Overridepublic void init() throws ServletException {ConnectionFactory connFactory = null;Connection conn = null;Session session = null;Queue queue = null;MessageConsumer consumer = null;try {Properties pro = new Properties();pro.setProperty("java.naming.factory.initial", tcf);pro.setProperty("java.naming.provider.url", remoteURL);Context context = new javax.naming.InitialContext(pro);connFactory = (ConnectionFactory) context.lookup(remoteFactory);conn = connFactory.createConnection();session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);queue = (Queue) context.lookup(QUEUENAME);consumer = session.createConsumer(queue);conn.start();consumer.setMessageListener(new MessageListener() {public void onMessage(Message message) {try {if (message != null) {if (message instanceof TextMessage) {TextMessage textMessage = (TextMessage) message;log.info(" = = = = = = = = = 收到一条Text消息:" + textMessage.getText());log.info(" = = = = = = = = = 来自 " + QUEUENAME + " :" + textMessage);String resuleMsg = UserAction.handle(textMessage.getText());// 将处理结果返回给认证中心MsgSenderAction.send(resuleMsg);} else if (message instanceof MapMessage) {log.info(" = = = = = = = = = 收到一条Map消息 ");} else if (message instanceof StreamMessage) {log.info(" = = = = = = = = = 收到一条Text消息 ");} else if (message instanceof BytesMessage) {log.info(" = = = = = = = = = 收到一条Bytes消息 ");} else if (message instanceof ObjectMessage) {log.info(" = = = = = = = = = 收到一条Object消息 ");} else if (message instanceof FileMessage) {log.info(" = = = = = = = = = 收到一条文件消息 ");}} else {log.info(" = = = = = = = = = 消息为空 ");}} catch (JMSException e) {e.printStackTrace();}}});} catch (Exception e) {System.out.println("Exception oxxurred :" + e.toString());log.info(" = = = = = = = = = 消息监听器异常: " + e.toString());e.printStackTrace();}}
}
  • Web.xml

在项目的核心配置文件 web.xml 中新增节点 “ servlet ”;

<servlet><servlet-name>aos</servlet-name><servlet-class>com.etc.send.data.controller.QmController</servlet-class><load-on-startup>2</load-on-startup>
</servlet>

新增 servlet 节点后,在项目启动的时候,就可以监听 TongLing/Q ,并且实现消息接收了。

Java 项目中使用 TongLink/Q 实现消息队列传输相关推荐

  1. java B2B2C Springcloud电子商城系统-通过消息队列传输zipkin日志

    一.zipkin服务端配置 需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 1.引入依赖 //===========消息队列方式的依 ...

  2. Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知

    今天来讲一下 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知 一.配置钉钉群 1.新建一个接收通知的钉钉群 如下图,创建一个接收通知的钉钉群 选择项目群,点创建 输入群名称,右侧选择群 ...

  3. java小游戏项目的php_在Java项目中使用PHP类

    有可能以某种方式在Java项目中使用Zend附带的一些PHP类吗?我想总有办法,但是怎么样? 解决方法: 问题你应该先问问自己 首先你应该问自己一些问题,这可以帮助你使用给你最好的答案(因为编程很多次 ...

  4. 实战派 | Java项目中玩转Redis6.0客户端缓存

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 在前面的文章中,我们介绍了Redis6.0中的新特性客户端缓存client-side caching,通过tel ...

  5. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  6. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  7. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

  8. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  9. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  10. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

最新文章

  1. Hibernate4一对一关系映射(共享主键方式)
  2. 我们注意到您的计算机目前处于离线状态_如何将您的计算机添加到Pekka网络
  3. python PyQt5 QtWidgets.QAbstractSlider.valueChanged()
  4. struts2:JSON在struts中的应用(JSP页面中将对象转换为JSON字符串提交、JSP页面中获取后台Response返回的JSON对象)...
  5. UVA 620 - Cellular Structure
  6. php七牛持久化处理,使用七牛自定义数据处理范例
  7. 如何在SQL Server Reporting Services中自动创建KPI
  8. 30 万奖金悬赏 | CSDN 软件开发精英赛即日启动
  9. 35. 第一个只出现一次的字符(C++版本)
  10. 朴素贝叶斯(naive Bayes)原理与应用
  11. JAVA调用 TSC 打印机 打印中文问题/JNA中文乱码
  12. matlab求解普通函数的导数问题(diff函数的用法)
  13. win10 系统字体大小修改
  14. OpenCV-Python教程:图像金字塔
  15. boost format使用详解
  16. Microchip最新推出的ATMEGA4809-XPRO开发板简介
  17. opengl 读取obj模型
  18. 如何让DIV中的内容左边的靠左对齐,右边的靠右对齐?
  19. HTTP之原理,长短连接,响应码,三握四挥,八种方法
  20. MacOS M1配置Java环境

热门文章

  1. Windows Media Player 播放.WMV文件破解许可证
  2. three.js实现球体地球城市模拟迁徙
  3. JavaWeb购物系统(课程设计)
  4. Oracle学习网站总结
  5. android 左移动画_android 动画Animation之TranslateAnimation移动
  6. idea破解码(最后一个有用)
  7. 贾俊平统计学思维导图- 第十一、十二章 相关分析和回归分析
  8. 迪士尼机器人芭蕾舞_这些年迪士尼造的酷萌机器人!
  9. 毕业设计之外卖点餐系统(App及后台)
  10. Linux学习整理-终端快捷键(常用)