消息中间件ActiveMQ使用详解

        </h1><div class="clear"></div><div class="postBody">

消息中间件ActiveMQ使用详解

一、消息中间件的介绍

介绍

消息队列 是指利用 高效可靠消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。

特点(作用)

  • 应用解耦
  • 异步通信
  • 流量削峰
  • (海量)日志处理
  • 消息通讯
  • …...

应用场景

根据消息队列的特点,可以衍生出很多场景,或者说很多场景都能用到。下面举几个例子:

1)异步通信

​ 注册时的短信、邮件通知,减少响应时间;

2)应用解耦

​ 信息发送者和消息接受者无需耦合,比如调用第三方;

3)流量削峰

​ 例如秒杀系统;

二、消息中间件的对比

1.ActiveMQ

官网:activemq.apache.org/

简介:

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

特点:

  1. 支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议

  2. 完全支持JMS客户端和Message Broker中的企业集成模式

  3. 支持许多高级功能,如消息组,虚拟目标,通配符和复合目标

  4. 完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息

  5. Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置

  6. 专为高性能集群,客户端 - 服务器,基于对等的通信而设计

  7. CXF和Axis支持,以便ActiveMQ可以轻松地放入这些Web服务堆栈中以提供可靠的消息传递

  8. 可以用作内存JMS提供程序,非常适合单元测试JMS

  9. 支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输

  10. 使用JDBC和高性能日志支持非常快速的持久性

2.RabbitMQ

官网:www.rabbitmq.com/

简介:

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ轻巧且易于部署在云端。 它支持多种消息传递协议。 RabbitMQ可以部署在分布式和联合配置中,以满足高规模,高可用性需求。RabbitMQ可运行在许多操作系统和云环境中,并为大多数流行语言提供广泛的开发工具。(来自官网翻译)

AMQP (Advanced MessageQueue):高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

RabbitMQ最初广泛应用于金融行业,根据官网描述,它具有如下特点:

特点:

  1. 异步消息传递:支持多种消息协议,消息队列,传送确认,灵活的路由到队列,多种交换类型;
  2. 支持几乎所有最受欢迎的编程语言:Java,C,C ++,C#,Ruby,Perl,Python,PHP等等;
  3. 可以部署为高可用性和吞吐量的集群; 跨多个可用区域和区域进行联合;
  4. 可插入的身份验证,授权,支持TLS和LDAP。;
  5. 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面;
  6. 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

3. Kafka

官网:kafka.apache.org/

简介:

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

Kafka它主要用于处理活跃的流式数据,因此Kafaka在大数据系统中使用较多。

特点:

  1. 同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

  2. 可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。

  3. 分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。

  4. 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。

  5. 支持online和offline的场景。

4. RocketMQ

官网:rocketmq.apache.org/

简介:

RocketMQ是阿里开源的消息中间件,目前在Apache孵化,使用纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是简单的复制,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景,支撑了阿里多次双十一活动。

特点:

  1. 支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型
  2. 在一个队列中可靠的先进先出(FIFO)和严格的顺序传递
  3. 支持拉(pull)和推(push)两种消息模式
  4. 单一队列百万消息的堆积能力
  5. 支持多种消息协议,如 JMS、MQTT 等
  6. 分布式高可用的部署架构,满足至少一次消息传递语义
  7. 提供 docker 镜像用于隔离测试和云集群部署
  8. 提供配置、指标和监控等功能丰富的 Dashboard

三、ActiveMQ的安装

1.安装步骤

activemq在各个系统下都有对应的安装包。以下来演示Linux系统下安装activemq。

进入apache-activemq-5.15.8/bin目录,启动activemq./activemq start

输出以上信息,表示启动成功。

2.安装遇到的问题

在安装过程中,通过查看activemq的运行状态,

显示以上。

通过./bin/activemq console 命令查看运行日志:

主机名中包含非法字符;

那么解决办法就很简单了,改主机名:

1、方法一使用hostnamectl命令

hostnamectl set-hostname 主机名

2、方法二:修改配置文件 /etc/hostname 保存退出

修改完成之后重启即可,这里我使用的是方法一:

hostnamectl set-hostname activemq

查看运行状态:

五、ActiveMQ页面介绍

待ActiveMQ安装启动好,访问http://ip:8161/admin,登录名和密码都是admin(在配置文件中可修改),进入ActiveMQ的主页:

下面来介绍每个菜单的功能:

1.Queue消息队列页面

Name:消息队列的名称。

Number Of Pending Messages:未被消费的消息数目。

Number Of Consumers:消费者的数量。

Messages Enqueued:进入队列的消息 ;进入队列的总消息数目,包括已经被消费的和未被消费的。 这个数量只增不减。

Messages Dequeued:出了队列的消息,可以理解为是被消费掉的消息数量。在Queues里它和进入队列的总数量相等(因为一个消息只会被成功消费一次),如果暂时不等是因为消费者还没来得及消费。

2.Topic主题页面

Name:主题名称。

Number Of Pending Messages:未被消费的消息数目。

Number Of Consumers:消费者的数量。

Messages Enqueued:进入队列的消息 ;进入队列的总消息数目,包括已经被消费的和未被消费的。 这个数量只增不减。

Messages Dequeued:出了队列的消息,可以理解为是被消费掉的消息数量。在Topics里,因为多消费者从而导致数量会比入队列数高。

3.Subscribers查看订阅者页面

查看订阅者信息,只在Topics消息类型中这个页面才会有数据。

4.Connections查看连接数页面

六、简单使用

引入jar包:

        <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>5.7.0</version></dependency>

1.点对点(P2P)模型

​ 点对点模型,采用的是队列(Queue)作为消息载体。在该模式中,一条消息只能被一个消费者消费,没有被消费的,只能留在队列中,等待被消费,或者超时。举个例子,如果队列中有10条消息,有两个消费者,就是一个消费者消费5条信息,你一条我一条。以下以代码演示。

消息发布者:

public static void main(String[] args) throws JMSException{/** 实现步骤* 1.建立ConnectionFactory工厂对象,需要填入用户名、密码、连接地址(一般使用默认,如果没有修改的话)* 2.通过ConnectionFactory对象创建一个Connection连接,并且调用Connection的start方法开启连接,Connection方法默认是关闭的* 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息,参数1是是否启用事物,参数2是签收模式,一般设置为自动签收* 4.通过Session对象创建Destination对象,指的是一个客户端用来制定生产消息目标和消费消息来源的对象。在PTP的模式中,Destination被称作队列,在Pub/Sub模式中,Destination被称作主题(Topic)* 5.通过Session对象创建消息的发送和接收对象(生产者和消费者)* 6.通过MessageProducer的setDeliverMode方法为其设置持久化或者非持久化特性* 7.使用JMS规范的TextMessage形式创建数据(通过Session对象),并用MessageProducer的send方法发送数据。客户端同理。记得关闭*/ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://94.191.49.192:61616");Connection connection = connectionFactory.createConnection();connection.start();Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("queue");MessageProducer producer = session.createProducer(destination);producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);for (int i=0;i<=5;i++) {TextMessage textMessage = session.createTextMessage();textMessage.setText("我是第"+i+"消息");producer.send(textMessage);}if(connection!=null){connection.close();}
}

消息消费者:

    public static void main(String[] args) throws JMSException{ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://94.191.49.192:61616");Connection connection = connectionFactory.createConnection();connection.start();Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);Destination destination = session.createQueue("queue");MessageConsumer consumer = session.createConsumer(destination);while (true){TextMessage message = (TextMessage) consumer.receive();if (message==null){break;}System.out.println(message.getText());}if(connection!=null){connection.close();}}

先启动两个消费者,在启动发布者:

2.发布/订阅(Pub/Sub)模型

发布/订阅模型采用的是主题(Topic)作为消息通讯载体。该模式类似微信公众号的模式。发布者发布一条信息,然后将该信息传递给所有的订阅者。注意:订阅者想要接收到该信息,必须在该信息发布之前订阅。

发布者发布信息:

     public static void main(String[] args) throws JMSException, IOException{// 创建一个ConnectionFactory对象连接MQ服务器ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://94.191.49.192:61616");// 创建一个连接对象Connection connection;connection = connectionFactory.createConnection();// 开启连接connection.start();// 使用Connection对象创建一个Session对象Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 创建一个Destination对象。topic对象Topic topic = session.createTopic("test-topic");// 使用Session对象创建一个消费者对象。MessageConsumer consumer = session.createConsumer(topic);// 接收消息consumer.setMessageListener(new MessageListener() {
        <span class="hljs-meta">@Override</span><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onMessage</span><span class="hljs-params">(Message message)</span> </span>{<span class="hljs-comment">// 打印结果</span>TextMessage textMessage = (TextMessage) message;String text;<span class="hljs-keyword">try</span> {text = textMessage.getText();System.out.println(<span class="hljs-string">"这是接收到的消息:"</span> + text);} <span class="hljs-keyword">catch</span> (JMSException e) {e.printStackTrace();}}});System.out.println(<span class="hljs-string">"topic消费者启动。。。。"</span>);<span class="hljs-comment">// 等待接收消息</span>System.in.read();<span class="hljs-comment">// 关闭资源</span>consumer.close();session.close();connection.close();
}</code></pre>

订阅者订阅信息:

    public static void main(String[] args) throws JMSException{// 1、创建一个连接工厂对象,需要指定服务的ip及端口。ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://94.191.49.192:61616");// 2、使用工厂对象创建一个Connection对象。Connection connection = connectionFactory.createConnection();// 3、开启连接,调用Connection对象的start方法。connection.start();// 4、创建一个Session对象。// 第一个参数:是否开启事务。如果true开启事务,第二个参数无意义。一般不开启事务false。// 第二个参数:应答模式。自动应答或者手动应答。一般自动应答。Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 5、使用Session对象创建一个Destination对象。两种形式queue、topic,现在应该使用topicTopic topic = session.createTopic("test-topic");// 6、使用Session对象创建一个Producer对象。MessageProducer producer = session.createProducer(topic);// 7、创建一个Message对象,可以使用TextMessage。for (int i = 0; i < 50; i++) {TextMessage textMessage = session.createTextMessage("第" + i + "一个ActiveMQ队列目的地的消息");// 8、发送消息producer.send(textMessage);}// 9、关闭资源producer.close();session.close();connection.close();}

订阅者要提前订阅,所以先运行订阅者。

3.两种模式对比

1)由以上,我们可以总结出ActiveMQ的实现步骤:

  • 建立ConnectionFactory工厂对象,需要填入用户名、密码、连接地址
  • 通过ConnectionFactory对象创建一个Connection连接
  • 通过Connection对象创建Session会话
  • 通过Session对象创建Destination对象;在P2P的模式中,Destination被称作队列(Queue),在Pub/Sub模式中,Destination被称作主题(Topic)
  • 通过Session对象创建消息的发送和接收对象
  • 发送消息
  • 关闭资源

2)可以看出,P2P模式和Pub/Sub模式,在实现上的区别是通过Session创建的Destination对象不一样,在P2P的模式中,Destination被称作队列(Queue),在Pub/Sub模式中,Destination被称作主题(Topic)

七、参考

  1. https://www.jianshu.com/p/0363ac9ff574
  2. https://juejin.im/post/5adaaae351882567356415eb

作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/10615605.html
版权声明:本文为博主原创文章,转载请附上博文链接!

标签: 消息中间件
<div id="blog_post_info">
好文要顶 关注我 收藏该文

追梦1819
关注 - 2
粉丝 - 65

+加关注
0
0
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/yanfei1819/p/10540401.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/yanfei1819/p/10540401.html" title="发布于 2019-03-16 00:47">重定向和转发的分析与理解</a>
<br>
<a href="https://www.cnblogs.com/yanfei1819/p/10637644.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/yanfei1819/p/10637644.html" title="发布于 2019-04-01 17:21">关于公众号JavaTokings侵权声明</a>
posted @ 2019-03-28 16:00  追梦1819  阅读(1413)  评论(2)  编辑 收藏
</div><!--end: topics 文章、评论容器-->
         </div>

#1楼

2019-03-29 17:05

        <a id="a_comment_author_4217099" href="https://www.cnblogs.com/littleatp/" target="_blank">美码师</a></div><div class="feedbackCon">
activemq,生产项目在使用吗
支持(0) 反对(0)

https://pic.cnblogs.com/face/242916/20180527184904.png

     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#2楼

[楼主]
4217116
2019/3/29 下午5:16:32

2019-03-29 17:16

        <a id="a_comment_author_4217116" href="https://www.cnblogs.com/yanfei1819/" target="_blank">追梦1819</a></div><div class="feedbackCon">
@ 美码师
还没有,这是我的个人demo。项目没达到一定的规模,应该都不需要mq。
支持(0) 反对(0)

https://pic.cnblogs.com/face/1183871/20191017131115.png

     </div></div>
刷新评论刷新页面返回顶部
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】腾讯云海外1核2G云服务器低至2折,半价续费券限量免费领取!
【推荐】阿里云双11返场来袭,热门产品低至一折等你来抢!
【推荐】天翼云双十一翼降到底,云主机11.11元起,抽奖送大礼
【推荐】流程自动化专家UiBot,体系化教程成就高薪RPA工程师
【活动】京东云服务器_云主机低于1折,低价高性能产品备战双11
【优惠】七牛云采购嘉年华,云存储、CDN等云产品低至1折
相关博文:
· ActiveMQ-为什么需要消息中间件?
· MQ的使用场景
· 关于消息队列的使用
· 消息队列 概念 配合SpringBoot使用Demo
· 当设计消息队列时我们关心什么
» 更多推荐...

20本必看的阿里精品免费电子书

    <div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" style="border: 0px; vertical-align: bottom;" data-google-container-id="2" data-load-complete="true"></iframe></div></div>
</div>
<div id="under_post_kb">

最新 IT 新闻:
· 空腹锻炼燃烧更多脂肪
· 开源 Linux 手机 Librem 5 的首批支持者分享使用体验
· 以健康之名交换iPhone数据,你愿意被“监视”吗?
· 华为两次卷入裁员争议背后:弱势劳动者应堤防哪些离职陷阱?
· 黑洞周围可能有千万颗行星“相伴”
» 更多新闻...
<div id="sideBar"><div id="sideBarMain">
<div id="profile_block">昵称:<a href="https://home.cnblogs.com/u/yanfei1819/">追梦1819</a><br>园龄:<a href="https://home.cnblogs.com/u/yanfei1819/" title="入园时间:2017-06-15">2年5个月</a><br>粉丝:<a href="https://home.cnblogs.com/u/yanfei1819/followers/">65</a><br>关注:<a href="https://home.cnblogs.com/u/yanfei1819/followees/">2</a><div id="p_b_follow">

+加关注

     <div id="blog-calendar" style="">
< 2019年12月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
     <div id="leftcontentcontainer"><div id="blog-sidecolumn">

我的随笔

  • 我的评论

  • 我的参与

  • 最新评论

  • 我的标签

    1.Google工作法

                </li><li>
    

    2.学习心得思维导图

                </li><li>
    

    3.MySQL索引背后的数据结构及算法原理

                </li><li>
    

    4.Spring Boot 2.2.0新特性

                </li><li>
    

    5.SpringBoot第二十五篇:SpringBoot与AOP

                </li><li>
    

    6.给大家来一波免费电影福利~~~

                </li><li>
    

    7.SpringBoot第二十四篇:应用监控之Admin

                </li><li>
    

    8.影响世界的100个经典管理定律

                </li><li>
    

    9.SpringBoot第二十三篇:安全性之Spring Security

                </li><li>
    

    10.20年研发管理经验谈(十六)(终结)

                </li>
    

    随笔档案
    (92)

            </h3><ul><li>
    

    2019年11月(3)

                        </li><li>
    

    2019年10月(3)

                        </li><li>
    

    2019年9月(1)

                        </li><li>
    

    2019年8月(4)

                        </li><li>
    

    2019年7月(9)

                        </li><li>
    

    2019年6月(15)

                        </li><li>
    

    2019年5月(17)

                        </li><li>
    

    2019年4月(6)

                        </li><li>
    

    2019年3月(3)

                        </li><li>
    

    2019年1月(4)

                        </li><li>
    

    2018年12月(1)

                        </li><li>
    

    2018年11月(6)

                        </li><li>
    

    2018年10月(2)

                        </li><li>
    

    2018年9月(6)

                        </li><li>
    

    2018年5月(1)

                        </li><li>
    

    2018年4月(1)

                        </li><li>
    

    2018年3月(3)

                        </li><li>
    

    2018年2月(1)

                        </li><li>
    

    2018年1月(3)

                        </li><li>
    

    2017年11月(1)

                        </li><li>
    

    2017年10月(1)

                        </li><li>
    

    2017年9月(1)

                        </li></ul></div><div id="sidebar_articlecategory" class="catListArticleCategory sidebar-block"><h3 class="catListTitle">
    

    文章分类
    (1)

            </h3><ul><li>
    

    echarts

                        </li><li>
    

    工具类的使用(1)

                        </li></ul></div>
    

    推荐排行榜

    • 1. SpringBoot 第一篇:入门篇(9)
    • 2. 20年研发管理经验谈(一)(4)
    • 3. 程序员业余赚钱(4)
    • 4. idea创建SpringBoot项目(3)
    • 5. SpringBoot第二十三篇:安全性之Spring Security(2)

     </div><!--end: sideBarMain -->
    </div><!--end: sideBar 侧边栏容器 -->
    <div class="clear"></div>
    </div>
    

activemq使用详解相关推荐

  1. ActiveMQ配置详解之如何配置自动重新连接

    2019独角兽企业重金招聘Python工程师标准>>> ActiveMQ配置详解之如何配置自动重新连接 博客分类: MQ 这从这一篇开始,将讲解在activeMQ中的相关配置.由于a ...

  2. java 消息队列详解_Java消息队列-Spring整合ActiveMq的详解

    本篇文章主要介绍了详解Java消息队列-Spring整合ActiveMq ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.概述 首先和大家一起回顾一下Java 消息服 ...

  3. ActiveMQ基本详解

    MQ简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们.消息传 ...

  4. 【转】ActiveMQ消息传送机制以及ACK机制详解

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载自 http://shift-alt-ctrl.iteye.com/blog/2020182 AcitveMQ是作为一 ...

  5. ActiveMQ消息传送机制以及ACK机制详解

    2019独角兽企业重金招聘Python工程师标准>>> AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全 ...

  6. ActiveMQ中Consumer特性详解与优化

    前言 从本文中你可以了解到如下内容: 1) consumer端消息消费的模型,session的运作机制 2) 如果提升broker和consumer端消息消费的速率 3) selector,group ...

  7. 消息队列的实现原理和ActiveMQ详解

    一.链式调用 在我们日常的项目开发过程中,一般各模块或者函数方法之间,都是采用链式调用的方式,为了完成一个整体功能,我们会将其拆分成多个函数(或者子模块),比如模块A调用模块B,模块B调用模块C,模块 ...

  8. ActiveMQ学习总结(5)——Java消息服务JMS详解

    JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...

  9. ActiveMQ 详解 (精)

    ActiveMQ JMS(Java Message Service) 它是一种与厂商无关的API,用来访问消息和收发系统消息.它类似于JDBC,JDBC是可以用来访问不同的关系型数 据库的API,而J ...

最新文章

  1. SELINUX导致的SSH密匙无法创建和访问的问题
  2. 【Ubuntu】 Ubuntu18.04修改主机名
  3. wamp增加php,新版PHPWAMP自定义添加PHP版本方法步骤
  4. ASP.NET Core 认证与授权[4]:JwtBearer认证
  5. linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_lookup函数
  6. Spring boot - 整合 Redis缓存(上)
  7. 201506110248 ---实验报告
  8. Android自定义View【实战教程】3⃣️----Paint类、Path类以及PathEffect类详解
  9. java json serialize_java-是否可以简化@JsonSerialize注释?
  10. python经典程序实例-十五个Python经典案例,学会这些,Python基础已过关!
  11. springboot集成quartz完成定时任务
  12. matlab中数字分频器的,一种基于FPGA的数字分频器设计详解
  13. Windows XP DOS命令大全
  14. RDD之Cartesian
  15. 用Notepad++ 宏功能 将json数据转换为EXCEL
  16. hdu 5145 NPY and girls (莫队算法)
  17. CAD将文字变成曲线(网页版)
  18. PS 基础知识 .atn文件如何使用
  19. 2种js动态绑定事件方法
  20. qtcreate添加资源文件之后该文件变成只读

热门文章

  1. 3、 如何搭建高德离线地图服务
  2. 赵小楼:《天道》《遥远的救世主》深度解析(28)人文意识发展到今天,我们应该怎么改变?
  3. mysql使用结巴语句_结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍
  4. 问题解决:C# VS2010 调试程序出现:xxx.exe 中的 xxx 处有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突
  5. element-ui 表格使用多选 如何回显打勾
  6. SAP中库存确定组的应用简析
  7. Matlab上位机开发(一) —— 了解上位机
  8. 新浪微博用户密码泄露 经部分用户验证为真
  9. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 C语言开发LED例程
  10. 阿里云视频点播(上传视频)服务最新版本使用方法(解决部分依赖无法下载或不存在问题)