MQ配置

Mq配置归

网上收集的,自己整理了一下。

1.       基础环境

计算机A: computer1 ,IP地址为:10.1.1.1

计算机B: computer2 ,IP地址为:10.1.1.2

分别在两台计算机上安装MQ

2.       创建MQ对象

每一个WMS MQ 至少需要创建一个本地队列、一个远程队列、一个传输队列、一个发送通道、一个接收通道,并且所有WMS MQ上的队列管理器共享同一个服务器连接通道(并且A的接收通道名=B的发送通道名称、A的发送通道名称=B的接收通道名称)

l          计算机A:

打开“WebSphere MQ资源管理器,新建队列管理器,名称为A_QueueManager,其余采用默认设置;

Ø        创建队列

1.          创建本地队列:在A_QueueManager队列管理中创建本地队列,名称为A _LocalQueue;

2.          创建远程队列:名称为A _TransmissionQueue.新建时选择“本地队列”,并将“用法”设置为“传输”;

3.          创建远程队列:名称为A_RemoteQueue,设置远程队列名称为B_LocalQueue(计算机B的本地队列),传输队列名称为A_TransmissionQueue(即上一步创建的传输队列)

Ø       创建通道

1.          创建发送方通道:名称为A.B,传输协议为TCP/IP,连接名称为10.1.1.21414),传输队列为A_TransmissionQueue(即创建队列第2步创建的传输队列)

2.          创建接受方通道:名称为B.A,采用默认设置;

3.          创建服务器连接通道:名称为ServerConnChannel.采用默认设置。

l          计算机A:

打开“WebSphere MQ资源管理器,新建队列管理器,名称为B_QueueManager,其余采用默认设置;

Ø        创建队列

1.          创建本地队列:在B_QueueManager队列管理中创建本地队列,名称为B _LocalQueue;

2.          创建远程队列:名称为B _TransmissionQueue.新建时选择“本地队列”,并将“用法”设置为“传输”;

3.          创建远程队列:名称为B_RemoteQueue,设置远程队列名称为A_LocalQueue(计算机A的本地队列),传输队列名称为B_TransmissionQueue(即上一步创建的传输队列)

Ø       创建通道

1.          创建发送方通道:名称为B.A,传输协议为TCP/IP,连接名称为10.1.1.11414),传输队列为B_TransmissionQueue(即创建队列第2步创建的传输队列)

2.          创建接受方通道:名称为A.B,采用默认设置;

3.          创建服务器连接通道:名称为ServerConnChannel.采用默认设置。

3.       消息测试

AB上分别启动发送方通道,正常情况通道状态应该为“正在运行”。

import java.io.FileInputStream;

import java.io.IOException;

import java.io.StringWriter;

 

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

 

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.MQPutMessageOptions;

import com.ibm.mq.MQQueue;

import com.ibm.mq.MQQueueManager;

 

/**

 * A的发送程序和B的接收程序

* @author Administrator

 *

 */

public class AQueueManager {

void sender() {

           try {

                    String hostName = "10.1.1.1";

                    String channel = "ServerConnChannel

                    String qManager = "A_QueueManager";

                    String remoteQueue = "A_RemoteQueue";

                    int port = 1414;

                    //建立MQEnvironment属性以便客户机连接

                    MQEnvironment.hostname = hostName;

                    MQEnvironment.channel = channel;

                    MQEnvironment.port = port;

                    MQEnvironment.CCSID = 1381;

                    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

MQC.TRANSPORT_MQSERIES);

                    // 连接到队列管理器

                    MQQueueManager qMgr = new MQQueueManager(qManager);

                    /*

                     * 建立打开选项以便打开用于输出的队列,进一步而言,如果队列管理器是

                     * 停顿的话,我们也已设置了选项去应对不成功情况。

                     */

                    int openOptions = MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING;

                    //打开队列

                    MQQueue queue = qMgr.accessQueue(remoteQueue, openOptions, null, null,null);

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

                    MQPutMessageOptions pmo = new MQPutMessageOptions();

                    /*

                     *下一步我们建立消息,MQMessage类压缩了包含实际消息数据的数据缓冲区,

*和描述消息的所有MQMD 参数.欲建立新消息,创建MQMessage 类新

                     * 实例以及使用writxxx方法 MQQueue put()方法也可作

* 为参数MQPutMessageOptions 类的实例。)

                    */

                    MQMessage outMsg = new MQMessage(); // Create The message

                    //创建消息缓冲区

                    outMsg.format = MQC.MQFMT_STRING; // Set the MQMD format

                    // 设置MQMD 格式字段

                    // 准备用户数据消息

                    String path = "d:/shd.xml";

                    SAXBuilder sax = new SAXBuilder();

                    Document document = sax.build(new FileInputStream(path));

                    StringWriter out = new StringWriter();

                    XMLOutputter XMLOut = new XMLOutputter(Format.getPrettyFormat()

                                       .setEncoding("GBK"));

                    XMLOut.output(document, out);

                    outMsg.writeUTF(out.toString());

                    // Now we put The message on the Queue(现在我们在队列上放置消息)

                    queue.put(outMsg, pmo);

                    // Commit the transaction.(提交事务处理)

                    qMgr.commit();

                    System.out.println(" The message has been Sussesfully put!");

                    // Close the the Queue and Queue manager objects.(关闭队列和队列管理器对象)

                    queue.close();

                    qMgr.disconnect();

           } catch (MQException ex) {

                    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();

           }

}

public void receiver() {

           try {

                    String hostName = "10.1.1.2";

                    String channel = " ServerConnChannel ";

                    String qManager = " B_QueueManager";

                    String localQueue = "B _LocalQueue";

                    int port = 1415;

                    // 建立MQEnvironment 属性以便客户机连接

                    MQEnvironment.hostname = hostName;

                    MQEnvironment.channel = channel;

                    MQEnvironment.port = port;

                    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,

MQC.TRANSPORT_MQSERIES);

                    //连接到队列管理器

                    MQQueueManager qMgr = new MQQueueManager(qManager);

                    /*

                     * 建立打开选项以便打开用于输出的队列,进一步而言,

*如果队列管理器是停顿的话,我们也已设置了选项去应对不成功情况。

                     */

                    int openOptions = MQC.MQOO_INPUT_SHARED|

MQC.MQOO_FAIL_IF_QUIESCING|MQC.MQOO_INQUIRE ;

                    // 打开队列

                    MQQueue queue = qMgr.accessQueue(localQueue, openOptions, null, null,null);

                    //设置放置消息选项

                    MQGetMessageOptions getMsgOpt = new MQGetMessageOptions();

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_SYNCPOINT; // Get messages

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

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_WAIT; // Wait if no messages

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

                    getMsgOpt.options = getMsgOpt.options + MQC.MQGMO_FAIL_IF_QUIESCING; // Fail

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

                    getMsgOpt.waitInterval = 3000;

                    // 设置等待的时间限制

                    /*

                     * 下一步我们建立消息,MQMessage类压缩了包含实际消息数据的数据缓冲区,

                     * 和描述消息的所有MQMD 参数)

                     */

                    MQMessage inMsg = new MQMessage(); // Create the message

                    // 创建消息缓冲区

                     int depth = queue.getCurrentDepth();

                     System.out.println("queue depth is:"+queue.getCurrentDepth());

            //将队列的里的消息读出来

            while(depth-->0) {     

                MQMessage msg = new MQMessage();// 要读的队列的消息     

                MQGetMessageOptions gmo = new MQGetMessageOptions();     

                queue.get(msg, gmo);     

                System.out.println("消息的大小为:"+msg.getDataLength());     

                System.out.println("消息的内容:/n"+msg.readUTF());     

                System.out.println("---------------------------");     

            }

                    // 提交事务处理

                    qMgr.commit();

                    // 关闭队列和队列管理器对象

                    queue.close();

                    qMgr.disconnect();

           }

           catch (MQException ex){

                    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();

           }

}s

public static void main(String args[]) {

           ZlglQueueManager queueManager = new ZlglQueueManager();

           queueManager.sender();

           //queueManager.receiver();

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Spring Boot中自定义MQ配置有多种方式,以下是其中的一种: 1. 配置MQ连接信息 在application.properties或application.yml中添加如下配置: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest ``` 2. 创建MQ连接工厂 创建一个名为RabbitMQConfig的类,用于创建MQ连接工厂并配置MQ连接信息: ```java @Configuration public class RabbitMQConfig { @Value("${spring.rabbitmq.host}") private String host; @Value("${spring.rabbitmq.port}") private Integer port; @Value("${spring.rabbitmq.username}") private String username; @Value("${spring.rabbitmq.password}") private String password; @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost(host); connectionFactory.setPort(port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); return connectionFactory; } } ``` 3. 创建MQ模板 创建一个名为RabbitMQTemplate的类,用于创建MQ模板: ```java @Configuration public class RabbitMQTemplate { @Autowired private ConnectionFactory connectionFactory; @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); return rabbitTemplate; } } ``` 4. 发送消息 在需要发送消息的地方注入RabbitTemplate,并调用send方法发送消息: ```java @RestController public class MessageController { @Autowired private RabbitTemplate rabbitTemplate; @PostMapping("/send") public String sendMessage(@RequestBody String message) { rabbitTemplate.convertAndSend("exchangeName", "routingKey", message); return "Message sent successfully"; } } ``` 以上是一个简单的例子,可以根据实际需要进行修改。 ### 回答2: 在Spring Boot中自定义MQ(消息队列)配置需要以下几个步骤: 1. 引入相关的依赖:在项目的pom.xml文件中添加MQ的依赖,例如使用RabbitMQ可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 2. 创建MQ的连接配置类:可以创建一个Spring配置类,使用@Configuration注解,并使用@Bean注解创建一个连接工厂。这个连接工厂可以根据具体的MQ的类型来创建,比如对于RabbitMQ可以使用RabbitConnectionFactory。 3. 创建MQ的消息发送者:可以创建一个Spring的Component类,并使用@Autowired注解注入上一步创建的连接工厂。在这个类中可以定义一个发送消息的方法,可以使用RabbitTemplate来发送消息。 4. 配置MQ的相关属性:在项目的application.properties或application.yml文件中可以配置MQ的相关属性,例如RabbitMQ的连接URL、用户名、密码等。 5. 使用自定义的MQ配置:在其他需要使用MQ的地方,可以通过@Autowired注解注入第3步中创建的消息发送者,然后就可以调用发送消息的方法了。 通过以上步骤,就可以在Spring Boot中自定义MQ配置了。可以根据具体的业务需求选择不同的MQ类型,并配置相关的属性和方法来实现消息的发送和接收。 ### 回答3: Spring Boot提供了一种简单和方便的方式来自定义MQ(消息队列)的配置。下面是一个使用Spring Boot自定义MQ配置的示例: 首先,我们需要在项目的依赖中添加相应的MQ库,例如使用Apache Kafka,可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-kafka</artifactId> </dependency> ``` 接下来,在`application.properties`或`application.yml`文件中配置MQ的相关属性,例如: ```properties spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group-1 spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer ``` 然后,在Java代码中创建一个`KafkaTemplate`对象,用于发送和接收消息。可以通过在类上添加`@Autowired`注解或使用`new`关键字来创建`KafkaTemplate`对象。例如: ```java @Autowired private KafkaTemplate<String, String> kafkaTemplate; ``` 接下来,可以使用`kafkaTemplate`对象来发送消息到MQ,例如: ```java kafkaTemplate.send("my-topic", "my-message"); ``` 同时,我们还可以创建一个消费者来监听MQ中的消息。可以使用`@KafkaListener`注解来创建消费者,并指定监听的Topic和Group。例如: ```java @KafkaListener(topics = "my-topic", groupId = "my-group-1") public void consume(String message) { System.out.println("Received message: " + message); } ``` 通过以上步骤,我们就可以在Spring Boot中自定义MQ配置。当然,具体的配置方式会根据所使用的MQ库而有所不同。需要根据实际情况进行相关配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值