精华内容
下载资源
问答
  • spring boot整合activemq实现MQ的使用-java编程
    2021-03-23 23:19:26

    一.去activemq官网下载mq软件

    去Apache官网下载activemq软件,并安装。

    二.编写Java代码

    java编程中spring boot整合activemq实现MQ的使用

    1.在spring boot项目中添加activemq的依赖

    org.springframework.boot

    spring-boot-starter-activemq

    2.application.properties配置文件中添加mq的相关配置

    #==================activemq Config Start==================

    spring.activemq.broker-url=tcp://127.0.0.1:61616

    spring.activemq.in-memory=true

    spring.activemq.password=admin

    spring.activemq.user=admin

    spring.activemq.packages.trust-all=false

    spring.activemq.packages.trusted=

    spring.activemq.pool.configuration.*=

    spring.activemq.pool.enabled=false

    spring.activemq.pool.expiry-timeout=0

    spring.activemq.pool.idle-timeout=30000

    spring.activemq.pool.max-connections=1

    #==================activemq Config End ==================

    3.消息提供者

    package com.htwl.collection.cqyth.amq;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import javax.jms.Destination;

    import org.apache.activemq.command.ActiveMQQueue;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.jms.core.JmsMessagingTemplate;

    import org.springframework.scheduling.annotation.EnableScheduling;

    import org.springframework.scheduling.annotation.Scheduled;

    import org.springframework.stereotype.Component;

    /**

    * MQ消息提供者

    *

    * @author leftso

    *

    */

    @Component

    @EnableScheduling // 测试用启用任务调度

    public class Provider {

    /** MQ jms实例 **/

    @Autowired

    private JmsMessagingTemplate jmsMessagingTemplate;

    private static int count = 0;

    @Scheduled(fixedDelay = 5000) // 每5s执行1次-测试使用

    public void send() {

    Destination destination = new ActiveMQQueue("TEST_QUEUE_LOG");// 这里定义了Queue的key

    String message = "Send AMQ Test ..." + count;

    System.out.println("[" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + "]" + message);

    count++;

    this.jmsMessagingTemplate.convertAndSend(destination, message);

    }

    }

    4.消费

    package com.htwl.collection.cqyth.amq;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import org.springframework.jms.annotation.JmsListener;

    import org.springframework.stereotype.Component;

    @Component

    public class Consumer {

    Logger LOGGER = LoggerFactory.getLogger(this.getClass());

    /**

    * 使用@JmsListener注解来监听指定的某个队列内的消息

    **/

    @JmsListener(destination = "TEST_QUEUE_LOG")

    public void removeMessage(String msg) {

    System.out.println("["+new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date())+"]Receive:"+msg);

    }

    }

    更多相关内容
  • MQ java 基础编程

    2021-03-14 11:37:32
    MQ java 基础编程编写人:邬文俊编写时间 : 2006-2-16联系邮件 : wenjunwu430@gmail.com前言通过 2 个多星期对 MQ 学习,在 partner 丁 & partner 武 的帮助下完成了该文档。该文档提供一个简单的例子,通过对...

    MQ java 基础编程

    编写人:邬文俊

    编写时间 : 2006-2-16

    联系邮件 : wenjunwu430@gmail.com

    前言

    通过 2 个多星期对 MQ 学习,在 partner 丁 & partner 武 的帮助下完成了该文档。该文档提供一个简单的例子,通过对该例子的讲解,你将知道:

    1. 用 java 写客户端从 MQ Server 收发消息。

    2. MQ 作为 Websphere Application Server 的 JMS 资源提供者。

    3. JMS message 映射转化为  MQ message

    文档中的知识全部从参考资料和 IBM 提供的文档中获得。 I recommend u to read the documents if u want to know more about the MQ.

    参考资料

    《 Using java 》( some place name it 《 base java 》) —–the very

    important document offered by IBM, every java programmer should read it!

    《让 WebSphere MQ 成为部署在 WebSphere Application Server 中的应用程序的 JMS 提供程序》

    Websphere MQ 入门教程 (a document written by IBM engineer)

    mqseries_class_for_java

    《 IBM - JMS 应用和使用 WebSphere MQ MQI 接口的应用如何进行信息头的交换(二)数据映射》 ——- 《 using java 》 mapping message 部分的翻译。

    MQ–IBM MQSeries 使用指南

    WebSphere Application Server V5 and WebSphere MQ Family Integration. PDF

    WebSphere MQ Application Programming Guide. PDF

    IBM MQSeries 的触发机制

    让 WebSphere MQ 成为部署在 WebSphere Application Server 中的应用程序的 JMS 提供程序

    例子说明

    例子包括 3 个部分:发送客户端、 MDB 、接收客户端。

    客户端 A 把文件发送到服务器,服务器将该文件转发给客户端 B 。客户端A通过向 MQ 客户机直接发送消息。 MQ 队列会把客户端A发送的 MQ

    Message 转换为 JMS Message 。 MDB 接收到转换后的 JMS 消息后,保存文件在服务器,然后把文件转发到发送队列(

    JMS 队列)。发送队列由 MQ Server 提供,所以即为发送到了 MQ 队列。 MQ 队列把 JMS Message 转换为 MQ

    Message 。客户端 B 从 MQ 队列中接收转换后的消息,从消息中读取文件,保存在硬盘。

    MQMESSAGE JMS MESSAGE

    Client A————————->mq queue ——————->MDB

    Client B

    配置 MQ Server

    这里使用的是 MQ Server 5.2 。 MQ Server 和 WebSphere Application Server 安装在同一台机器上( 2 者可以使用绑定方式通信)。

    要配置的项目:

    1. 队列管理器 QMGR

    2. 侦听端口 4001

    3. 本地队列 EXAMPLE.QUEUE

    4. 本地队列 EXAMPLE.SENDQUEUE

    5. 通道 EXAMPLE.CHANNEL

    打开 WebSphere MQ 资源管理器。展开队列管理器节点,右键,新建队列管理器。取名字为 QMGR ,设置侦听端口 4001 。

    在建好的队列管理器 QMGR 下面新建 2 个本地队列: EXAMPLE.QUEUE , EXAMPLE.SENDQUEUE 。

    展开高级节点,新建服务器连接通道 EXAMPLE.CHANNEL 。

    Note :不要搞错队列和通道的类型。

    2. 验证 MQ 配置

    打开 WebSphere MQ 服务。可以查看服务是否启动、服务监听端口。

    3. 配置 WAS JMS

    具体操作参考《让 WebSphere MQ 成为部署在 WebSphere Application Server 中的应用程序的 JMS 提供程序》该文章可以在 IBM WebSphere 开发者技术期刊 中找到。

    要配置的项目:

    1. WebSphere MQ 连接工厂

    JNDI name : jms/JMSExampleConnectionFactory

    2. WebSphere MQ 队列目标

    JNDI name : jms/JMSExampleQueue ;基本队列名: EXAMPLE.QUEUE ;目标客户机: JMS

    。目标客户机决定了 MQ 队列接收方的消息格式。因为是用 MDB 接收消息,所以设置为 JMS 。另一个队列是由 MQ

    客户端接收消息,所以另一个队列的目标客户机是 MQ 。如果配置错误, MQ 队列转换消息的格式将不是你所想要的。具体参考《 IBM - JMS

    应用和使用 WebSphere MQ MQI 接口的应用如何进行信息头的交换(二)数据映射》

    3. WebSphere MQ 队列目标

    JNDI name : jms/JMSExampleSendQueue ;

    基本队列名: EXAMPLE.SENDQUEUE ;目标客户机: MQ 。

    4. 配置 MDB

    在 WAS 上配置 侦听器端口

    名称: JMSExampleQueuePort ;

    连接工厂 JNDI 名 jms/JMSExampleConnectionFactory ;

    目标 JNDI 名: jms/JMSExampleQueue 。

    Message Driven Beans 用于侦听消息的侦听器端口。每个端口指定 MDB 将侦听的(依据该端口部署的) JMS 连接工厂和 JMS 目标。

    MDB 部署描述符中配置

    连接工厂 JNDI 名 jms/JMSExampleConnectionFactory ;

    目标 JNDI 名: jms/JMSExampleQueue ;

    监听端口名称: JMSExampleQueuePort (监听端口名称也可以在管理控制台中修改)

    5. 代码

    客户端 A (发送方)

    MqPut.java

    package cn.edu.itec.mqclient;

    import java.io.File;

    import com.ibm.mq.MQC;

    import com.ibm.mq.MQEnvironment;

    import com.ibm.mq.MQException;

    import com.ibm.mq.MQMessage;

    import com.ibm.mq.MQPutMessageOptions;

    import com.ibm.mq.MQQueueManager;

    public class MQPut {

    private String HOST_URL = “192.168.1.116”;

    private String MQ_CHANNEL = "EXAMPLE.CHANNEL";

    private String MQ_MANAGER = "QMGR";

    private String MQ_QUEUE = "EXAMPLE.QUEUE";

    private int MQ_PORT = 4001;

    public static void main(String args[]) {

    new MQPut().SendFile("f:/JMSExampleEJB.jar");

    }

    public void SendFile(String sFilePath) {

    try {

    /* 设置 MQEnvironment 属性以便客户机连接 */

    MQEnvironment.hostname = HOST_URL;

    MQEnvironment.channel = MQ_CHANNEL;

    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

    MQC.TRANSPORT_MQSERIES);

    MQEnvironment.CCSID = 1381;

    MQEnvironment.port = MQ_PORT;

    /* 连接到队列管理器 */

    MQQueueManager qMgr = new MQQueueManager(MQ_MANAGER);

    System.out.println("queue manager is connected!");

    /* 设置打开选项以便打开用于输出的队列,如果队列管理器正在停止,我们也已设置了选项去应对不成功情况。 */

    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

    /* 打开队列 */

    com.ibm.mq.MQQueue queue = qMgr.accessQueue(MQ_QUEUE, openOptions);

    /* 设置放置消息选项我们将使用默认设置 */

    MQPutMessageOptions pmo = new MQPutMessageOptions();

    /* 创建消息, MQMessage 类包含实际消息数据的数据缓冲区,和描述消息的所有 MQMD 参数 */

    /* 创建消息缓冲区 */

    MQMessage outMsg = new MQMessage();

    /* set the properties of the message fot the selector */

    outMsg.correlationId = "clinet_B_receive".getBytes();

    outMsg.messageId = "1Aa".getBytes();

    /* write msg */

    MsgWriter.readFile(outMsg, new File(sFilePath));

    /* put message with default options */

    queue.put(outMsg, new MQPutMessageOptions());

    System.out.println("send file is success!");

    /* release resource */

    queue.close();

    qMgr.disconnect();

    } catch (MQException ex) {

    //System.out.println("fft!");

    System.out.println("An MQ Error Occurred: Completion Code is :\t"

    + ex.completionCode + "\n\n The Reason Code is :\t"

    + ex.reasonCode);

    ex.printStackTrace();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private void readFileToMessage(String FilePath) {

    }

    }

    JMS message 和 MQ message 有几个字段是相同的,这些字段的值将会在转换中保留。比较方便的是使用 CorrelationID 这个字段。通过设置这个字段,达到选择性的接收特定消息的功能。其它字段没有完全搞清楚,有的数据类型需要转换,例如 MessageID (对应于 JMSMessageID )。 MQ 消息选择和 JMS 不同,后者采用 selector ,前者通过设置接收消息的属性完成。例如设置 CorrelationID 为特定值。

    客户端 B

    MQGet.java

    package cn.edu.itec.mqclient;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.Hashtable;

    import com.ibm.mq.MQC;

    import com.ibm.mq.MQEnvironment;

    import com.ibm.mq.MQException;

    import com.ibm.mq.MQGetMessageOptions;

    import com.ibm.mq.MQMessage;

    import com.ibm.mq.MQQueueManager;

    /**

    * @author Administrator

    *

    * TODO To change the template for this generated type comment go to Window -

    * Preferences - Java - Code Style - Code Templates

    */

    public class MQGet {

    private static String HOST_URL = “192.168.1.116”;

    private static String MQ_CHANNEL = "EXAMPLE.CHANNEL";

    private static String MQ_MANAGER = "QMGR";

    private static String MQ_QUEUE = "EXAMPLE.SENDQUEUE";

    private static int MQ_PORT = 4001;

    public static void main(String[] args) {

    MQGet.getMessage();

    }

    public static void getMessage() {

    try {

    /* 设置 MQEnvironment 属性以便客户机连接 */

    MQEnvironment.hostname = HOST_URL;

    MQEnvironment.channel = MQ_CHANNEL;

    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

    MQC.TRANSPORT_MQSERIES);

    MQEnvironment.CCSID = 1381;

    MQEnvironment.port = MQ_PORT;

    /* 连接到队列管理器 */

    MQQueueManager qMgr = new MQQueueManager(MQ_MANAGER);

    System.out.println("queue manager is connected!");

    /*

    * 设置打开选项以便打开用于输出的队列,如果队列管理器停止,我们也 已设置了选项去应对不成功情况

    */

    int openOptions = MQC.MQOO_INPUT_SHARED

    | MQC.MQOO_FAIL_IF_QUIESCING;

    /* 打开队列 */

    com.ibm.mq.MQQueue queue = qMgr.accessQueue(MQ_QUEUE, openOptions);

    System.out.println(" 队列连接成功 ");

    /* 设置放置消息选项 */

    MQGetMessageOptions gmo = new MQGetMessageOptions();

    /* 在同步点控制下获取消息 */

    gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;

    /* 如果在队列上没有消息则等待 */

    gmo.options = gmo.options + MQC.MQGMO_WAIT;

    /* 如果队列管理器停顿则失败 */

    gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;

    /* 设置等待的时间限制 */

    gmo.waitInterval = MQC.MQWI_UNLIMITED;

    /* create the message buffer store */

    MQMessage inMessage = new MQMessage();

    /* set the selector */

    inMessage.correlationId = "clinet_B_receive".getBytes();

    /* get the message */

    queue.get(inMessage, gmo);

    System.out.println("get message success");

    /* 读出消息对象 */

    Hashtable messageObject = (Hashtable) inMessage.readObject();

    System.out.println(messageObject);

    /* 读出消息内容 */

    byte[] content = (byte[]) messageObject.get("content");

    /* save file */

    FileOutputStream output = new FileOutputStream(

    "f:/exampleReceive.jar");

    output.write(content);

    output.close();

    System.out.println(messageObject.get("FileName"));

    /* 提交事务 , 相当于确认消息已经接收,服务器会删除该消息 */

    qMgr.commit();

    } catch (MQException e) {

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    MDB

    MQMDBBeanBean.java MDB 文件

    package ejbs;

    import javax.jms.ObjectMessage;

    import javax.jms.BytesMessage;

    import javax.jms.StreamMessage;

    import javax.jms.TextMessage;

    import javax.jms.JMSException;

    import ehub.ihub.exchangeManager.*;

    import java.util.Hashtable;

    import java.io.ByteArrayInputStream;

    import java.io.FileOutputStream;

    import java.io.File;

    import java.io.ObjectInputStream;

    /**

    * Bean implementation class for Enterprise Bean: MQMDBBean

    */

    public class MQMDBBeanBean implements javax.ejb.MessageDrivenBean,

    javax.jms.MessageListener {

    private javax.ejb.MessageDrivenContext fMessageDrivenCtx;

    /**

    * getMessageDrivenContext

    */

    public javax.ejb.MessageDrivenContext getMessageDrivenContext() {

    return fMessageDrivenCtx;

    }

    /**

    * setMessageDrivenContext

    */

    public void setMessageDrivenContext(javax.ejb.MessageDrivenContext ctx) {

    fMessageDrivenCtx = ctx;

    }

    /**

    * ejbCreate

    */

    public void ejbCreate() {

    }

    /**

    * onMessage

    */

    public void onMessage(javax.jms.Message msg) {

    try {

    System.out.println(msg.toString());

    if (msg instanceof TextMessage) {

    System.out.println("TextMessage");

    } else if (msg instanceof ObjectMessage) {

    System.out.println("ObjectMessage");

    } else if (msg instanceof StreamMessage) {

    System.out.println("StreamMessage");

    } else if (msg instanceof BytesMessage) {

    System.out.println("BytesMessage");

    BytesMessage bytesMessage = (BytesMessage) msg;

    String sCorrelationID = new String(bytesMessage

    .getJMSCorrelationIDAsBytes());

    String sMessageID = bytesMessage.getJMSMessageID();

    long size = bytesMessage.getBodyLength();

    System.out.println("size=" + size + "/n CorrelationID="

    + sCorrelationID + "/n MessageID=" + sMessageID);

    /*read the message and save the file*/

    ReadMessage.readMessage(bytesMessage);

    System.out.println("read message success");

    /*send the message to the client */

    SendMessage.sendFileToReceiveQueue(new File("c:/receivedExample.jar"));

    System.out.println("send file success");

    } else {

    System.out.println("no message");

    }

    } catch (Exception e) {

    System.out.println("onmessage 执行错误,回滚! ");

    e.printStackTrace(System.err);

    fMessageDrivenCtx.setRollbackOnly();

    }

    }

    private void getProperties(byte[] p) {

    }

    /**

    * ejbRemove

    */

    public void ejbRemove() {

    }

    }

    ReadMessage.java

    /*

    * Created on 2006-2-15

    *

    * TODO To change the template for this generated file go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    package ehub.ihub.exchangeManager;

    import java.io.ByteArrayInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.ObjectInputStream;

    import java.util.Hashtable;

    import javax.jms.BytesMessage;

    import javax.jms.JMSException;

    /**

    * @author Administrator

    *

    *

    */

    public class ReadMessage {

    /**

    * read message including property and body

    *

    * @param Message

    * @throws JMSException

    * @throws IOException

    * @throws ClassNotFoundException

    */

    public static void readMessage(BytesMessage Message) {

    try {

    long bodySize = Message.getBodyLength();

    byte[] buf = new byte[Integer.parseInt(String.valueOf(bodySize))];

    /* 消息内容读到字节数组中 */

    Message.readBytes(buf);

    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(

    buf);

    /* 从字节流读出消息对象 */

    ObjectInputStream objectInputStream = new ObjectInputStream(

    byteArrayInputStream);

    Hashtable messageObject = (Hashtable) objectInputStream

    .readObject();

    /* 解析消息 */

    byte[] contentBuf = (byte[]) messageObject.get("content");

    /* 把文件保存 */

    FileOutputStream fileWriter = new FileOutputStream(

    "c:/receivedExample.jar");

    fileWriter.write(contentBuf);

    fileWriter.close();

    } catch (JMSException e) {

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    SendMessage.java

    /*

    * Created on 2006-2-16

    *

    * TODO To change the template for this generated file go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    package ehub.ihub.exchangeManager;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.util.Hashtable;

    import javax.jms.BytesMessage;

    import javax.jms.Connection;

    import javax.jms.ConnectionFactory;

    import javax.jms.JMSException;

    import javax.jms.MessageProducer;

    import javax.jms.ObjectMessage;

    import javax.jms.Queue;

    import javax.jms.Session;

    import javax.naming.Context;

    import javax.naming.InitialContext;

    import javax.naming.NamingException;

    /**

    * @author Administrator

    *

    * TODO To change the template for this generated type comment go to Window -

    * Preferences - Java - Code Style - Code Templates

    */

    public class SendMessage {

    private static String MQ_CHANNEL = “EXAMPLE.CHANNEL”;

    private static String MQ_MANAGER = "QMGR";

    private static String MQ_QUEUE = "EXAMPLE.SENDQUEUE";

    private static int MQ_PORT = 4001;

    private static String JMS_CONNECTIONFACTORY = "jms/JMSExampleConnectionFactory";

    private static String QUEUE_NAME="jms/JMSExampleSendQueue";

    public static void sendFileToReceiveQueue(File file) {

    try {

    Context initContext = new InitialContext();

    ConnectionFactory qconFactory = (ConnectionFactory) initContext

    .lookup(JMS_CONNECTIONFACTORY);

    Connection qcon = qconFactory.createConnection();

    Session session = qcon.createSession(false,

    Session.AUTO_ACKNOWLEDGE);

    Queue queue = (Queue) initContext.lookup(QUEUE_NAME);

    MessageProducer producer = session.createProducer(queue);

    ObjectMessage outMessage=session.createObjectMessage();

    /* write the file information into the message */

    Hashtable fileInfo = new Hashtable();

    fileInfo.put("FileName", file.getName());

    fileInfo.put("FileSize", Long.toString(file.length()));

    /* write the file content into the message */

    FileInputStream fos = new FileInputStream(file);

    byte[] buf;

    int size = (int) file.length();

    buf = new byte[size];

    int num = fos.read(buf);

    fos.close();

    /*add the file byte stream to the object*/

    fileInfo.put("content", buf);

    outMessage.setObject(fileInfo);

    outMessage.getObject();

    outMessage.setJMSCorrelationIDAsBytes((new String("clinet_B_receive")).getBytes());

    // qcon.start();

    producer.send(outMessage);

    producer.close();

    session.close();

    qcon.close();

    } catch (NamingException e) {

    System.out.println(" 获得连接失败 ,jndi 查找失败 ");

    e.printStackTrace();

    } catch (JMSException e) {

    System.out.println(" 发送文件异常 ");

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    System.out.println(" 发送文件过程中 io 操作失败 ");

    e.printStackTrace();

    }

    }

    }

    展开全文
  • MQ6.0_JAVA编程

    2010-06-06 17:52:41
    MQ6.0_JAVA编程电子书,mq使用
  • IBM MQ编程模式中文版

    2018-05-19 15:19:43
    介绍如何利用 MQSeries classes for Java 编程,简单易懂
  • 实现java接口的MQ编程

    2010-11-12 13:30:07
    实现java接口的MQ编程,解压后有包,还有说明文档.
  • MQ java编程

    2013-04-09 22:12:17
    简单的java操作IBM MQ的代码说明,并有代码例子,希望对大家有帮助
  • 编写人:邬文俊编写时间:2006-2-16联系邮件:wenjunwu430@gmail.com前言通过2个多星期对MQ学习,在partner丁&...用java写客户端从MQ Server收发消息。2.MQ作为Websphere Application Server的JMS资源提供者。3.JMS ...

    编写人:邬文俊

    编写时间

    2006-2-16

    联系邮件

    :

    wenjunwu430@gmail.com

    前言

    通过

    2

    个多星期对

    MQ

    学习,在

    partner

    & partner

    的帮助下完成了该文档。该文档提供一个简单的例子,通过对该例子的讲解,你将知道:

    1.

    java

    写客户端从

    MQ Server

    收发消息。

    2.

    MQ

    作为

    Websphere Application Server

    JMS

    资源提供者。

    3.

    JMS message

    映射转化为

    MQ message

    文档中的知识全部从参考资料和

    IBM

    提供的文档中获得。

    I recommend u to read the documents if u want to know more about the MQ.

    参考资料

    1.

    Using java

    》(

    some place name it

    base java

    》)

    -----the very important document offered by IBM, every java programmer should read it!

    2.

    《让

    WebSphere MQ

    成为部署在

    WebSphere Application Server

    中的应用程序的

    JMS

    提供程序》

    3.

    Websphere MQ

    入门教程

    (a document written by IBM engineer)

    4.

    mqseries_class_for_java

    5.

    IBM - JMS

    应用和使用

    WebSphere MQ MQI

    接口的应用如何进行信息头的交换(二)数据映射》

    -------

    using java

    mapping message

    部分的翻译。

    6.

    MQ--IBM MQSeries

    使用指南

    7.

    WebSphere Application Server V5 and WebSphere MQ Family Integration. PDF

    8.

    WebSphere MQ Application Programming Guide. PDF

    9.

    IBM MQSeries

    的触发机制

    10.

    WebSphere MQ

    成为部署在

    WebSphere Application Server

    中的应用程序的

    JMS

    提供程序

    例子说明

    例子包括

    3

    个部分:发送客户端、

    MDB

    、接收客户端。

    客户端

    A

    把文件发送到服务器,服务器将该文件转发给客户端

    B

    。客户端A通过向

    MQ

    客户机直接发送消息。

    MQ

    队列会把客户端A发送的

    MQ Message

    转换为

    JMS Message

    MDB

    接收到转换后的

    JMS

    消息后,保存文件在服务器,然后把文件转发到发送队列(

    JMS

    队列)。发送队列由

    MQ Server

    提供,所以即为发送到了

    MQ

    队列。

    MQ

    队列把

    JMS Message

    转换为

    MQ Message

    。客户端

    B

    MQ

    队列中接收转换后的消息,从消息中读取文件,保存在硬盘。

    MQMESSAGEJMS MESSAGE

    Client A------------------------->mq queue------------------->MDB

    Client B

    1.

    配置

    MQ Server

    这里使用的是

    MQ Server 5.2

    MQ Server

    WebSphere Application Server

    安装在同一台机器上(

    2

    者可以使用绑定方式通信)。

    要配置的项目:

    1.

    队列管理器

    QMGR

    2.

    侦听端口

    4001

    3.

    本地队列

    EXAMPLE.QUEUE

    4.

    本地队列

    EXAMPLE.SENDQUEUE

    5.

    通道

    EXAMPLE.CHANNEL

    打开

    WebSphere MQ

    资源管理器。展开队列管理器节点,右键,新建队列管理器。取名字为

    QMGR

    ,设置侦听端口

    4001

    在建好的队列管理器

    QMGR

    下面新建

    2

    个本地队列:

    EXAMPLE.QUEUE

    EXAMPLE.SENDQUEUE

    展开高级节点,新建服务器连接通道

    EXAMPLE.CHANNEL

    Note

    :不要搞错队列和通道的类型。

    2.

    验证

    MQ

    配置

    打开

    WebSphere MQ

    服务。可以查看服务是否启动、服务监听端口。

    3.

    配置

    WAS JMS

    具体操作参考《让

    WebSphere MQ

    成为部署在

    WebSphere Application Server

    中的应用程序的

    JMS

    提供程序》该文章可以在

    IBM WebSphere

    开发者技术期刊

    中找到。

    要配置的项目:

    JNDI name

    jms/JMSExampleConnectionFactory

    JNDI name

    jms/JMSExampleQueue

    ;基本队列名:

    EXAMPLE.QUEUE

    ;目标客户机:

    JMS

    。目标客户机决定了

    MQ

    队列接收方的消息格式。因为是用

    MDB

    接收消息,所以设置为

    JMS

    。另一个队列是由

    MQ

    客户端接收消息,所以另一个队列的目标客户机是

    MQ

    。如果配置错误,

    MQ

    队列转换消息的格式将不是你所想要的。具体参考《

    IBM - JMS

    应用和使用

    WebSphere MQ MQI

    接口的应用如何进行信息头的交换(二)数据映射》

    3.

    WebSphere MQ

    队列目标

    JNDI name

    jms/JMSExampleSendQueue

    基本队列名:

    EXAMPLE.SENDQUEUE

    ;目标客户机:

    MQ

    4.

    配置

    MDB

    WAS

    上配置

    名称:

    JMSExampleQueuePort

    连接工厂

    JNDI

    jms/JMSExampleConnectionFactory

    目标

    JNDI

    名:

    jms/JMSExampleQueue

    Message Driven Beans

    用于侦听消息的侦听器端口。每个端口指定

    MDB

    将侦听的(依据该端口部署的)

    JMS

    连接工厂和

    JMS

    目标。

    MDB

    部署描述符中配置

    连接工厂

    JNDI

    jms/JMSExampleConnectionFactory

    目标

    JNDI

    名:

    jms/JMSExampleQueue

    监听端口名称:

    JMSExampleQueuePort

    (监听端口名称也可以在管理控制台中修改)

    5.

    代码

    客户端

    A

    (发送方)

    MqPut.java

    package cn.edu.itec.mqclient;

    import java.io.File;

    import com.ibm.mq.MQC;

    import com.ibm.mq.MQEnvironment;

    import com.ibm.mq.MQException;

    import com.ibm.mq.MQMessage;

    import com.ibm.mq.MQPutMessageOptions;

    import com.ibm.mq.MQQueueManager;

    public class MQPut {

    private String HOST_URL = "192.168.1.116";

    private String MQ_CHANNEL = "EXAMPLE.CHANNEL";

    private String MQ_MANAGER = "QMGR";

    private String MQ_QUEUE = "EXAMPLE.QUEUE";

    private int MQ_PORT = 4001;

    public static void main(String args[]) {

    new MQPut().SendFile("f:/JMSExampleEJB.jar");

    }

    public void SendFile(String sFilePath) {

    try {

    /*

    设置

    MQEnvironment

    属性以便客户机连接

    */

    MQEnvironment.hostname = HOST_URL;

    MQEnvironment.channel = MQ_CHANNEL;

    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

    MQC.TRANSPORT_MQSERIES);

    MQEnvironment.CCSID = 1381;

    MQEnvironment.port = MQ_PORT;

    /*

    连接到队列管理器

    */

    MQQueueManager qMgr = new MQQueueManager(MQ_MANAGER);

    System.out.println("queue manager is connected!");

    /*

    设置打开选项以便打开用于输出的队列,如果队列管理器正在停止,我们也已设置了选项去应对不成功情况。

    */

    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

    /*

    打开队列

    */

    com.ibm.mq.MQQueue queue = qMgr.accessQueue(MQ_QUEUE, openOptions);

    /*

    设置放置消息选项我们将使用默认设置

    */

    MQPutMessageOptions pmo = new MQPutMessageOptions();

    /*

    创建消息,

    MQMessage

    类包含实际消息数据的数据缓冲区,和描述消息的所有

    MQMD

    参数

    */

    /*

    创建消息缓冲区

    */

    MQMessage outMsg = new MQMessage();

    /* set the properties of the message fot the selector */

    outMsg.correlationId = "clinet_B_receive".getBytes();

    outMsg.messageId = "1Aa".getBytes();

    /* write msg */

    MsgWriter.readFile(outMsg, new File(sFilePath));

    /* put message with default options */

    queue.put(outMsg, new MQPutMessageOptions());

    System.out.println("send file is success!");

    /* release resource */

    queue.close();

    qMgr.disconnect();

    } catch (MQException ex) {

    //System.out.println("fft!");

    System.out.println("An MQ Error Occurred: Completion Code is :\t"

    + ex.completionCode + "\n\n The Reason Code is :\t"

    + ex.reasonCode);

    ex.printStackTrace();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    private void readFileToMessage(String FilePath) {

    }

    }

    JMS message

    MQ message

    有几个字段是相同的,这些字段的值将会在转换中保留。比较方便的是使用

    CorrelationID

    这个字段。通过设置这个字段,达到选择性的接收特定消息的功能。其它字段没有完全搞清楚,有的数据类型需要转换,例如

    MessageID

    (对应于

    JMSMessageID

    )。

    MQ

    消息选择和

    JMS

    不同,后者采用

    selector

    ,前者通过设置接收消息的属性完成。例如设置

    CorrelationID

    为特定值。

    客户端

    B

    MQGet.java

    package cn.edu.itec.mqclient;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.util.Hashtable;

    import com.ibm.mq.MQC;

    import com.ibm.mq.MQEnvironment;

    import com.ibm.mq.MQException;

    import com.ibm.mq.MQGetMessageOptions;

    import com.ibm.mq.MQMessage;

    import com.ibm.mq.MQQueueManager;

    /**

    * @author Administrator

    *

    * TODO To change the template for this generated type comment go to Window -

    * Preferences - Java - Code Style - Code Templates

    */

    public class MQGet {

    private static String HOST_URL = "192.168.1.116";

    private static String MQ_CHANNEL = "EXAMPLE.CHANNEL";

    private static String MQ_MANAGER = "QMGR";

    private static String MQ_QUEUE = "EXAMPLE.SENDQUEUE";

    private static int MQ_PORT = 4001;

    public static void main(String[] args) {

    MQGet.getMessage();

    }

    public static void getMessage() {

    try {

    /*

    设置

    MQEnvironment

    属性以便客户机连接

    */

    MQEnvironment.hostname = HOST_URL;

    MQEnvironment.channel = MQ_CHANNEL;

    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

    MQC.TRANSPORT_MQSERIES);

    MQEnvironment.CCSID = 1381;

    MQEnvironment.port = MQ_PORT;

    /*

    连接到队列管理器

    */

    MQQueueManager qMgr = new MQQueueManager(MQ_MANAGER);

    System.out.println("queue manager is connected!");

    /*

    *

    设置打开选项以便打开用于输出的队列,如果队列管理器停止,我们也

    已设置了选项去应对不成功情况

    */

    int openOptions = MQC.MQOO_INPUT_SHARED

    | MQC.MQOO_FAIL_IF_QUIESCING;

    /*

    打开队列

    */

    com.ibm.mq.MQQueue queue = qMgr.accessQueue(MQ_QUEUE, openOptions);

    System.out.println("

    队列连接成功

    ");

    /*

    设置放置消息选项

    */

    MQGetMessageOptions gmo = new MQGetMessageOptions();

    /*

    在同步点控制下获取消息

    */

    gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;

    /*

    如果在队列上没有消息则等待

    */

    gmo.options = gmo.options + MQC.MQGMO_WAIT;

    /*

    如果队列管理器停顿则失败

    */

    gmo.options = gmo.options + MQC.MQGMO_FAIL_IF_QUIESCING;

    /*

    设置等待的时间限制

    */

    gmo.waitInterval = MQC.MQWI_UNLIMITED;

    /* create the message buffer store */

    MQMessage inMessage = new MQMessage();

    /* set the selector */

    inMessage.correlationId = "clinet_B_receive".getBytes();

    /* get the message */

    queue.get(inMessage, gmo);

    System.out.println("get message success");

    /*

    读出消息对象

    */

    Hashtable messageObject = (Hashtable) inMessage.readObject();

    System.out.println(messageObject);

    /*

    读出消息内容

    */

    byte[] content = (byte[]) messageObject.get("content");

    /* save file */

    FileOutputStream output = new FileOutputStream(

    "f:/exampleReceive.jar");

    output.write(content);

    output.close();

    System.out.println(messageObject.get("FileName"));

    /*

    提交事务

    ,

    相当于确认消息已经接收,服务器会删除该消息

    */

    qMgr.commit();

    } catch (MQException e) {

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    MDB

    MQMDBBeanBean.java MDB

    文件

    package ejbs;

    import javax.jms.ObjectMessage;

    import javax.jms.BytesMessage;

    import javax.jms.StreamMessage;

    import javax.jms.TextMessage;

    import javax.jms.JMSException;

    import ehub.ihub.exchangeManager.*;

    import java.util.Hashtable;

    import java.io.ByteArrayInputStream;

    import java.io.FileOutputStream;

    import java.io.File;

    import java.io.ObjectInputStream;

    /**

    * Bean implementation class for Enterprise Bean: MQMDBBean

    */

    public class MQMDBBeanBean implements javax.ejb.MessageDrivenBean,

    javax.jms.MessageListener {

    private javax.ejb.MessageDrivenContext fMessageDrivenCtx;

    /**

    * getMessageDrivenContext

    */

    public javax.ejb.MessageDrivenContext getMessageDrivenContext() {

    return fMessageDrivenCtx;

    }

    /**

    * setMessageDrivenContext

    */

    public void setMessageDrivenContext(javax.ejb.MessageDrivenContext ctx) {

    fMessageDrivenCtx = ctx;

    }

    /**

    * ejbCreate

    */

    public void ejbCreate() {

    }

    /**

    * onMessage

    */

    public void onMessage(javax.jms.Message msg) {

    try {

    System.out.println(msg.toString());

    if (msg instanceof TextMessage) {

    System.out.println("TextMessage");

    } else if (msg instanceof ObjectMessage) {

    System.out.println("ObjectMessage");

    } else if (msg instanceof StreamMessage) {

    System.out.println("StreamMessage");

    } else if (msg instanceof BytesMessage) {

    System.out.println("BytesMessage");

    BytesMessage bytesMessage = (BytesMessage) msg;

    String sCorrelationID = new String(bytesMessage

    .getJMSCorrelationIDAsBytes());

    String sMessageID = bytesMessage.getJMSMessageID();

    long size = bytesMessage.getBodyLength();

    System.out.println("size=" + size + "/n CorrelationID="

    + sCorrelationID + "/n MessageID=" + sMessageID);

    /*read the message and save the file*/

    ReadMessage.readMessage(bytesMessage);

    System.out.println("read message success");

    /*send the message to the client */

    SendMessage.sendFileToReceiveQueue(new File("c:/receivedExample.jar"));

    System.out.println("send file success");

    } else {

    System.out.println("no message");

    }

    } catch (Exception e) {

    System.out.println("onmessage

    执行错误,回滚!

    ");

    e.printStackTrace(System.err);

    fMessageDrivenCtx.setRollbackOnly();

    }

    }

    private void getProperties(byte[] p) {

    }

    /**

    * ejbRemove

    */

    public void ejbRemove() {

    }

    }

    ReadMessage.java

    /*

    * Created on 2006-2-15

    *

    * TODO To change the template for this generated file go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    package ehub.ihub.exchangeManager;

    import java.io.ByteArrayInputStream;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.ObjectInputStream;

    import java.util.Hashtable;

    import javax.jms.BytesMessage;

    import javax.jms.JMSException;

    /**

    * @author Administrator

    *

    *

    */

    public class ReadMessage {

    /**

    * read message including property and body

    *

    * @param Message

    * @throws JMSException

    * @throws IOException

    * @throws ClassNotFoundException

    */

    public static void readMessage(BytesMessage Message) {

    try {

    long bodySize = Message.getBodyLength();

    byte[] buf = new byte[Integer.parseInt(String.valueOf(bodySize))];

    /*

    消息内容读到字节数组中

    */

    Message.readBytes(buf);

    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(

    buf);

    /*

    从字节流读出消息对象

    */

    ObjectInputStream objectInputStream = new ObjectInputStream(

    byteArrayInputStream);

    Hashtable messageObject = (Hashtable) objectInputStream

    .readObject();

    /*

    解析消息

    */

    byte[] contentBuf = (byte[]) messageObject.get("content");

    /*

    把文件保存

    */

    FileOutputStream fileWriter = new FileOutputStream(

    "c:/receivedExample.jar");

    fileWriter.write(contentBuf);

    fileWriter.close();

    } catch (JMSException e) {

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (ClassNotFoundException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    SendMessage.java

    /*

    * Created on 2006-2-16

    *

    * TODO To change the template for this generated file go to

    * Window - Preferences - Java - Code Style - Code Templates

    */

    package ehub.ihub.exchangeManager;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.util.Hashtable;

    import javax.jms.BytesMessage;

    import javax.jms.Connection;

    import javax.jms.ConnectionFactory;

    import javax.jms.JMSException;

    import javax.jms.MessageProducer;

    import javax.jms.ObjectMessage;

    import javax.jms.Queue;

    import javax.jms.Session;

    import javax.naming.Context;

    import javax.naming.InitialContext;

    import javax.naming.NamingException;

    /**

    * @author Administrator

    *

    * TODO To change the template for this generated type comment go to Window -

    * Preferences - Java - Code Style - Code Templates

    */

    public class SendMessage {

    private static String MQ_CHANNEL = "EXAMPLE.CHANNEL";

    private static String MQ_MANAGER = "QMGR";

    private static String MQ_QUEUE = "EXAMPLE.SENDQUEUE";

    private static int MQ_PORT = 4001;

    private static String JMS_CONNECTIONFACTORY = "jms/JMSExampleConnectionFactory";

    private static String QUEUE_NAME="jms/JMSExampleSendQueue";

    public static void sendFileToReceiveQueue(File file) {

    try {

    Context initContext = new InitialContext();

    ConnectionFactory qconFactory = (ConnectionFactory) initContext

    .lookup(JMS_CONNECTIONFACTORY);

    Connection qcon = qconFactory.createConnection();

    Session session = qcon.createSession(false,

    Session.AUTO_ACKNOWLEDGE);

    Queue queue = (Queue) initContext.lookup(QUEUE_NAME);

    MessageProducer producer = session.createProducer(queue);

    ObjectMessage outMessage=session.createObjectMessage();

    /* write the file information into the message */

    Hashtable fileInfo = new Hashtable();

    fileInfo.put("FileName", file.getName());

    fileInfo.put("FileSize", Long.toString(file.length()));

    /* write the file content into the message */

    FileInputStream fos = new FileInputStream(file);

    byte[] buf;

    int size = (int) file.length();

    buf = new byte[size];

    int num = fos.read(buf);

    fos.close();

    /*add the file byte stream to the object*/

    fileInfo.put("content", buf);

    outMessage.setObject(fileInfo);

    outMessage.getObject();

    outMessage.setJMSCorrelationIDAsBytes((new String("clinet_B_receive")).getBytes());

    //qcon.start();

    producer.send(outMessage);

    producer.close();

    session.close();

    qcon.close();

    } catch (NamingException e) {

    System.out.println("

    获得连接失败

    ,jndi

    查找失败

    ");

    e.printStackTrace();

    } catch (JMSException e) {

    System.out.println("

    发送文件异常

    ");

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    System.out.println("

    发送文件过程中

    io

    操作失败

    ");

    e.printStackTrace();

    }

    }

    }

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=600470

    展开全文
  • MQ有关资料,实践、方法和概念,适合对MQ新手看。
  • 主要介绍了java向指定URL发送GET POST请求示例,学习JAVA网络编程一定会用到的,大家参考使用吧
  • MQ java 编程指南

    2008-09-24 09:49:11
    MQ java 编程指南, 如果你打算使用java 开发mq 应用, 就不要错过这本书.
  • 哈哈,最近学习MQ,资料汇总一下,需要的朋友可以下载 希望对大家学习MQ有帮助!!
  • 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。...
  • MQ6.0使用Java编程

    2010-05-24 16:31:10
    附件详解介绍了IBM websphere MQJava环境下的开发。
  • MQ&JAVA;编程

    2012-08-30 16:42:35
    MQ&JAVA;基本编程的参考文档 适于初学者
  • 并发编程Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。 [JAVA...

    前言

    并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。

    [JAVA工程师必会知识点之并发编程]

    1. 现在几乎100%的公司面试都必须面试并发编程,尤其是互联网公司,对于并发编程的要求更高,并发编程能力已经成为职场敲门砖。
    2. 现在已经是移动互联和大数据时代,对于应用程序的性能、处理能力、处理时效性要求更高了,传统的串行化编程无法充分利用现有的服务器性能。
    3. 并发编程是几乎所有框架的底层基础,掌握好并发编程更有利于我们学习各种框架。想要让自己的程序执行、接口响应、批处理效率更高,必须使用并发编程。
    4. 并发编程是中高级程序员的标配,是拿高薪的必备条件。

    小编趁这个周末整理了一下学习并发编程的笔记,现在给大家分享一下**(从Java并发集合、Java并发体系、锁、阻塞队列、线程池、并发基础的Xmind到并发编程学习pdf)**,几乎是全部覆盖,小伙伴们应该都知道,JVM、并发是进入大厂 Java 岗的必备技能之一,我相信有了这份并发编程笔记的帮助,一定会事半功倍。在此,我为你送上最真诚的祝福,愿大家都能拿到心仪的offer!!

    为什么学Java?Java能干什么?

    每年转行想做程序员的人都不少,这个行业不像销售一样,你不必要懂那么多人情世故;也不像某些“安稳岗位”一样,工资较低。程序员靠技术恰饭,没有那么多职场周旋,工资也很可观,因此就成为了大多数转行人的第一选择。

    Java作为世界上最主流的编程语言之一,也是应用最广泛的编程语言,属于编程语言中老大哥般的存在,是绝大多数人的第一选择。Java广泛的应用市场也直接决定了Java的高就业率,Java程序员最高平均21280元。

    Java涉及的领域:手机开发(安卓基于Java)、游戏开发(英雄联盟)、银行、金融系统、互联网、电信行业、电商行业、云计算、大数据、科学计算等等

    零基础如何入门Java?

    学习任何一门编程语言一定是要有实际操作的,安装好开发环境一定是开始必须做的事情,目前Java开发最流行的是IDEA,被公认为最好的Java开发工具

    安装好开发环境后,我们就可以开始接下来的学习了。对于零基础的人应该如何学习Java?很多人第一反应便是去百度或者知乎这些渠道搜索答案,结果就是你很大程度上被误导了,越学越糊涂,然后放弃。这个时候一份正确的系统化学习路线规划就很有必要了,这份是阿里淘系P8架构师制定的一份学习路线,非常适合新手入门。

    Java入门学习必备学习资料(大厂内部笔记)

    笔记一共分为三个部分:

    ①Java基本功

    ②Java面向对象

    ③Java核心技术

    ①Java基本功:

    • Java入门(基本知识概念)
    • Java语法

    ②Java面向对象:

    • 面向对象的三大特征
    • 修饰符
    • 接口和抽象类
    • 其他重要知识

    ③Java核心技术:

    • 集合
    • 异常
    • 多线程
    • 文件与I/O流

    技术学习总结

    学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

    最后面试分享

    大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

    [外链图片转存中…(img-CAjNLcms-1621409121372)]

    [外链图片转存中…(img-kEDXUYlx-1621409121373)]

    最后,若需要完整pdf版,可以点赞本文后点击这里免费领取

    展开全文
  • Websphere Message Broker实践,WebSphere MQ Java编程,Message Broker 计时器节点编程模式,MessageBroker TCPIP通信协议,wmb关于ws服务的引用,WMB连接oracle数据库实践,全部组件
  • MQ java 编程

    2009-05-13 11:44:46
    本章介绍如何利用MQSeries classes for Java编程。并且将为那些希望编写与MQSerie 相连接的Java应用程序或小程序的程序员提供所需的信息。
  • MQ教程+java编程

    2010-09-19 09:41:54
    MQ教程,如何安装MQ,mqjava编程
  • MQ 的作用及特点1) MQ 的作用1.1) 使用 MQ 实现消息通讯1.2) 使用 MQ 实现日志系统2) MQ 的特点及注意事项2.1)MQ 的特点2.2)引入 MQ 系统会带来的问题3) 常用的 MQ 中间件3.1)Redis 轻量级的消息中间件3.2)...
  • 整合MQ和WEBSPHERE环境:Win2000 SP4+WebSphere4 AES+MQ5.2.1本文假设你已正确安装websphere和mq5.2.1并且在mq上定义下列队列管理器,在dos下切换到C:\Program Files\IBM\MQSeries\bin下,键入:crtmqm -q QM_...
  • 本文是学习Java多线程与高并发知识时做的笔记。
  • java8 源码 new-Java ...└─mq 消息队列 │ └─kafka └─resources 消息队列源码会作专题研究 关于消息队列使用参考另一个库:https://github.com/GitJavaProgramming/springboot_mybatis 参考资料
  • 首先做如下配置定义:Use runmqsc to create the ... Queue to be triggered.DEFINE QLOCAL('JAVA.TRIGGER.QUEUE') REPLACE +DESCR('Application queue to test triggering') +SHARE +TRIGGER +TRIGTYPE (FIR...
  • 前言近期有了想跳槽的打算,所以自己想巩固一下自己的技术,想了解一些面试比较容易加分的项,近期准备深入研究一下Redis和MQ这两样,这总体上都是为了解决服务器并发的原因,刚翻到了一篇有关于...
  • Kafka作为新一代的消息系统,mq是比较成熟消息系统,而redis也可以发布订阅,那么这三者有何异同?RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的...
  • 项目场景 实现一个商品秒杀的功能,能后台自定义秒杀时间段、商品库存等... 创作不易,关注、点赞就是对作者最大的鼓励,欢迎在下方评论留言 欢迎关注微信公众号:键指JAVA,定期分享Java知识,一起学习,共同成长。
  • 初级java笔试题麦考瑞大学项目 2014 年第 1 届会议至 2017 年第 2 届会议 2017年第2期 ISYS358 - 计算行业项目 本单元将之前单元中的学习结合起来,为学生的工作做好准备。 学生以团队形式合作制定项目计划,该计划...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,583
精华内容 9,833
关键字:

java mq编程

java 订阅