深入掌握JMS(五):实战Topic

本文通过Java代码示例介绍了JMS中主题( Topic )的发布/订阅模型。两个消费者同时监听同一主题,生产者发送的消息会被所有消费者接收。示例使用了ActiveMQ作为消息中间件。

与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。

view plaincopy to clipboardprint?
import javax.jms.Connection;  
import javax.jms.JMSException;  
import javax.jms.Message;  
import javax.jms.MessageConsumer;  
import javax.jms.MessageListener;  
import javax.jms.MessageProducer;  
import javax.jms.Session;  
import javax.jms.TextMessage;  
import javax.jms.Topic;  
 
import org.apache.activemq.ActiveMQConnectionFactory;  
import org.apache.activemq.command.ActiveMQTopic;  
 
 
public class TopicTest {  
 
    public static void main(String[] args) throws Exception {  
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");  
     
        Connection connection = factory.createConnection();  
        connection.start();  
         
        //创建一个Topic  
        Topic topic= new ActiveMQTopic("testTopic");  
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
          
        //注册消费者1  
        MessageConsumer comsumer1 = session.createConsumer(topic);  
        comsumer1.setMessageListener(new MessageListener(){  
            public void onMessage(Message m) {  
                try {  
                    System.out.println("Consumer1 get " + ((TextMessage)m).getText());  
                } catch (JMSException e) {  
                    e.printStackTrace();  
                }  
            }  
        });  
         
        //注册消费者2  
        MessageConsumer comsumer2 = session.createConsumer(topic);  
        comsumer2.setMessageListener(new MessageListener(){  
            public void onMessage(Message m) {  
                try {  
                    System.out.println("Consumer2 get " + ((TextMessage)m).getText());  
                } catch (JMSException e) {  
                    e.printStackTrace();  
                }  
            }  
             
        });  
         
        //创建一个生产者,然后发送多个消息。  
        MessageProducer producer = session.createProducer(topic);  
        for(int i=0; i<10; i++){  
            producer.send(session.createTextMessage("Message:" + i));  
        }  
    }  
 

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;


public class TopicTest {

    public static void main(String[] args) throws Exception {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
  
        Connection connection = factory.createConnection();
        connection.start();
      
        //创建一个Topic
        Topic topic= new ActiveMQTopic("testTopic");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
       
        //注册消费者1
        MessageConsumer comsumer1 = session.createConsumer(topic);
        comsumer1.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer1 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
      
        //注册消费者2
        MessageConsumer comsumer2 = session.createConsumer(topic);
        comsumer2.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("Consumer2 get " + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
          
        });
      
        //创建一个生产者,然后发送多个消息。
        MessageProducer producer = session.createProducer(topic);
        for(int i=0; i<10; i++){
            producer.send(session.createTextMessage("Message:" + i));
        }
    }

}
运行后得到下面的输出结果:

view plaincopy to clipboardprint?
Consumer1 get Message:0 
Consumer2 get Message:0 
Consumer1 get Message:1 
Consumer2 get Message:1 
Consumer1 get Message:2 
Consumer2 get Message:2 
Consumer1 get Message:3 
Consumer2 get Message:3 
Consumer1 get Message:4 
Consumer2 get Message:4 
Consumer1 get Message:5 
Consumer2 get Message:5 
Consumer1 get Message:6 
Consumer2 get Message:6 
Consumer1 get Message:7 
Consumer2 get Message:7 
Consumer1 get Message:8 
Consumer2 get Message:8 
Consumer1 get Message:9 
Consumer2 get Message:9 
Consumer1 get Message:0
Consumer2 get Message:0
Consumer1 get Message:1
Consumer2 get Message:1
Consumer1 get Message:2
Consumer2 get Message:2
Consumer1 get Message:3
Consumer2 get Message:3
Consumer1 get Message:4
Consumer2 get Message:4
Consumer1 get Message:5
Consumer2 get Message:5
Consumer1 get Message:6
Consumer2 get Message:6
Consumer1 get Message:7
Consumer2 get Message:7
Consumer1 get Message:8
Consumer2 get Message:8
Consumer1 get Message:9
Consumer2 get Message:9
 
说明每一个消息都会被所有的消费者消费。

 

内容概要:本文档围绕“并_离网风光互补制氢合成氨系统”的容量规划与调度优化问题展开,重点介绍基于Cplex求解器的数学优化模型构建与Matlab代码实现方法。内容涵盖风能、太阳能、电解水制氢、合成氨工艺等多能源耦合系统的建模,针对并网与离网两种运行模式设计优化目标(如最小化投资与运行成本、提高可再生能源消纳率),并通过Matlab调用Cplex求解混合整数线性规划(MILP)问题,实现系统容量配置与运行调度的联合优化。文中强调对实际科研论文的复现,提供完整的代码资源与YALMIP建模工具包,帮助读者掌握能源系统优化的核心建模思路与求解技术。; 适合人群:具备一定Matlab编程基础,对可再生能源系统、综合能源系统优化、数学规划(如线性规划、整数规划)有一定了解的研究生、科研人员或从事新能源系统设计的工程技术人员。; 使用场景及目标:① 学习如何构建风光制氢合成氨这类复杂多能系统的优化模型;② 掌握利用YALMIP+Matlab+Cplex进行能源系统容量配置与调度优化的全流程实现方法;③ 复现高水平学术论文中的优化模型,为自身科研工作提供技术参考和代码基础。; 阅读建议:建议读者结合提供的网盘资源,先理解系统结构与数学模型,再逐步调试Matlab代码,重点关注目标函数、约束条件的构建方式以及YALMIP的语法应用,通过修改参数和场景设置加深对优化模型的理解。【复现】并_离网风光互补制氢合成氨系统容量-调度优化分析【Cplex求解】(Matlab代码实现)
内容概要:本文围绕“虚拟电厂多时间尺度调度优化”展开研究,重点复现顶级SCI论文成果,结合日前调度与日内调度两个时间尺度,构建虚拟电厂的优化调度模型。研究综合考虑可再生能源出力不确定性、储能系统特性及负荷灵活性等因素,利用Matlab实现优化算法求解,旨在提升虚拟电厂在复杂运行环境下的经济性与可靠性。文中提供了完整的代码实现方案,涵盖模型构建、数据处理、算法求解与结果可视化等环节,具有较强的工程复现价值和技术参考意义。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研【顶级SCI复现】【日前调度和日内调度两个时间尺度】虚拟电厂多时间尺度调度优化研究(Matlab代码实现)人员及从事能源系统优化工作的工程师;尤其适合致力于虚拟电厂、智能电网、可再生能源调度等领域研究的专业人士; 使用场景及目标:①用于科研工作中对高水平SCI论文的复现与验证;②支撑虚拟电厂多时间尺度调度模型的设计与优化;③作为教学案例帮助理解日前-日内协调调度机制与优化算法的应用; 阅读建议:建议读者结合提供的Matlab代码逐模块学习,重点关注模型构建逻辑与求解流程,配合实际数据进行调试与验证,深入理解优化变量设置、约束条件处理及目标函数设计思路,从而实现从理论到实践的有效转化。
内容概要:本文聚焦于虚拟电厂的多时间尺度调度问题,重点研究在考虑储能系统容量衰减的前提下,如何整合发电侧与多用户负荷的灵活性,实现系统优化运行。研究涵盖日前调度和日内调度两个时间尺度,通过构建精细化的数学模型,结合Matlab代码实现,对储能老化成本、可再生能源波动性、负荷需求响应等因素进行综合建模与仿真分析,旨在提升虚拟电厂的经济性与运行灵活性。文中所提方法属于顶级SCI论文复现,具有较强的学术前瞻性与工程应用价值。; 适合人群:电力系统、能源互联网、综合能源系统等领域的科研人员,具【顶级SCI复现】虚拟电厂的多时间尺度调度:在考虑储能系统容量衰减的同时,整合发电与多用户负荷的灵活性研究(Matlab代码实现)备一定Matlab编程基础和优化理论背景的研究生及高校教师;从事虚拟电厂、储能调度、可再生能源集成等相关方向的技术研发人员。; 使用场景及目标:① 复现高水平SCI论文中的多时间尺度调度模型;② 研究储能容量衰减对虚拟电厂长期运行的影响机制;③ 掌握考虑源-荷-储协同的优化建模方法与Matlab求解技术;④ 支持科研论文写作、项目申报及算法验证。; 阅读建议:建议结合提供的Matlab代码深入理解模型构建细节,重点关注目标函数设计、约束条件设置及两阶段调度耦合机制,建议配合YALMIP等优化工具包进行调试与扩展实验,以提升模型复现与创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值