JMS 异步消息的开发(二)

 

                 在发布/订阅(pub /分)的产品或应用软件,客户端的地址为主题的消息。 Publishers and subscribers are generally anonymous and may dynamically publish or subscribe to the content hierarchy. 发布服务器和订阅,一般不记名,可以动态地发布或订阅内容的层次结构。 The system takes care of distributing the messages arriving from a topic's multiple publishers to its multiple subscribers. 该系统以照顾用户分配多个消息的多个出版商其到达一个主题。 Topics retain messages only as long as it takes to distribute them to current subscribers. 消息只保留主题,只要他们需要分发到当前用户。

Pub/sub messaging has the following characteristics. 发布/订阅消息有以下几个特点。

  • Each message may have multiple consumers. 每个消息可以有多个消费者。
  • Publishers and subscribers have a timing dependency.发布服务器和订阅有时间依赖性。 A client that subscribes to a topic can consume only messages published after the client has created a subscription, and the subscriber must continue to be active in order for it to consume messages.一个客户端订阅一个主题可以使用客户端后发表的订阅只创造了一个消息,订阅者必须继续,以便它使用消息活跃。

          The JMS API relaxes this timing dependency to some extent by allowing clients to create durable subscriptions . JMS API的放松这个时间依赖性在一定程度上允许客户创建持久订阅Durable subscriptions can receive messages sent while the subscribers are not active. Durable subscriptions provide the flexibility and reliability of queues but still allow clients to send messages to many recipients. 长期订阅可以接收用户发送的消息,而不是积极的。持久订阅队列提供灵活性和可靠性,但仍允许客户端发送邮件给多个收件人。

 

在JBOSS中发布订阅模式的开发:

在JBOSS_HOME 的server\default\deploy

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ -->
<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mq.server.jmx.Topic"
         name="jboss.mq.destination:service=Topic,name=chatTopic">
    <attribute name="JNDIName">topic/chatTopic</attribute>
    <depends optional-attribute-name="DestinationManager" >jboss.mq:service=DestinationManager</depends>
  </mbean>

</server>

 

 

 

 

发布订阅模式的中服务端的信息:

 

package com.easyway.jboss.jms.ptp.service;
import java.util.Properties;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
 * 队列消息的发送者
 * 采用JMS点对点的模式
 * @author longgangbai
 *
 */
public class TopicSender {
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		TopicConnection conn=null;
		TopicSession session=null;
		try {
			//得到一个JNDI初始化上下文
			Properties props=new Properties();
			//设置
			props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
			
			props.setProperty(Context.PROVIDER_URL, "localhost:1099");
			
			props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
			
			InitialContext ctx=new InitialContext(props);
			//根据上下文查找一个连接工厂TopicConnectionFactory/QueueConnectionFactory  (有了两种连接工厂,
			//根绝topic、queue来是哟偶那个相应的类型),该连接工厂是有JMS提供的,不需要我们自己创建,每一个
			//厂商为他绑定一个全局的JNDI,我们功过JNDI便可获取它。
			TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory");
			//从连接工厂 中得到一个连接(Connect 的类型有两种,TopicConnection、QueueConnection)
			conn=factory.createTopicConnection();
			//通过连接来建立一个会话(Session)
			//建立一个不需要事物的并且能自动确认消息已接收的会话
			session=conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
			//查找目的地(目的地的类型有两种:Topic、Queue)
			Destination destination =(Topic)ctx.lookup("topic/chatTopic");
			//根绝会话以及目的地建立消息生产者MessageProducter(QueueSender 和TopicPublisher都扩展自MessageProducer接口)
			MessageProducer producer=session.createProducer(destination);
			
			TextMessage msg=session.createTextMessage("hi ,longgangbai ,this is jboss jms MDB message");
			
			producer.send(msg);
			System.out.println("发送消息成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
			try {
				session.close();
				conn.close();
			} catch (JMSException e2) {
				e2.printStackTrace();
			}
		}
	}

}

 

 

 

接受消息的代码如下:

 

package com.easyway.jboss.jms.ptp.service;
import java.util.Properties;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
 * 队列消息的发送者
 * 采用JMS点对点的模式
 * @author longgangbai
 *
 */
public class TopicReceive {
		/**
		 * 
		 * @param args
		 */
		public static void main(String[] args) {
			TopicConnection conn=null;
			TopicSession session=null;
			try {
				//得到一个JNDI初始化上下文
				Properties props=new Properties();
				//设置
				props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
				
				props.setProperty(Context.PROVIDER_URL, "localhost:1099");
				
				props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
				
				InitialContext ctx=new InitialContext(props);
				//根据上下文查找一个连接工厂TopicConnectionFactory/QueueConnectionFactory  (有了两种连接工厂,
				//根绝topic、queue来是哟偶那个相应的类型),该连接工厂是有JMS提供的,不需要我们自己创建,每一个
				//厂商为他绑定一个全局的JNDI,我们功过JNDI便可获取它。
				TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory");
				//从连接工厂 中得到一个连接(Connect 的类型有两种,TopicConnection、QueueConnection)
				conn=factory.createTopicConnection();
				//通过连接来建立一个会话(Session)
				//建立一个不需要事物的并且能自动确认消息已接收的会话
				session=conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
				//查找目的地(目的地的类型有两种:Topic、Queue)
				Destination destination =(Topic)ctx.lookup("topic/chatTopic");
				//根绝会话以及目的地建立消息生产者MessageProducter(QueueSender 和TopicPublisher都扩展自MessageProducer接口)
				MessageConsumer consumer=session.createConsumer(destination);
				
				//DisplayMessage ml = new DisplayMessage();   
				//consumer.setMessageListener(ml);  
				System.out.println("开始接受消息");
				conn.start();//备注如果没有对象将一直处于wait()的状态,直到接受到对象
				TextMessage msg = (TextMessage) consumer.receive(); 
				String message = msg.getText(); 
				System.out.println("message="+message);
				System.out.println("接送消息成功!");

				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				
				try {
					session.close();
					conn.close();
				} catch (JMSException e2) {
					e2.printStackTrace();
				}
			}
		}

	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数
机器学习是一种人工智能(AI)的子领域,致力于研究如何利用数据和算法让计算机系统具备学习能力,从而能够自动地完成特定任务或者改进自身性能。机器学习的核心思想是让计算机系统通过学习数据中的模式和规律来实现目标,而不需要显式地编程。 机器学习应用非常广泛,包括但不限于以下领域: 图像识别和计算机视觉: 机器学习在图像识别、目标检测、人脸识别、图像分割等方面有着广泛的应用。例如,通过深度学习技术,可以训练神经网络来识别图像中的对象、人脸或者场景,用于智能监控、自动驾驶、医学影像分析等领域。 自然语言处理: 机器学习在自然语言处理领域有着重要的应用,包括文本分类、情感分析、机器翻译、语音识别等。例如,通过深度学习模型,可以训练神经网络来理解和生成自然语言,用于智能客服、智能助手、机器翻译等场景。 推荐系统: 推荐系统利用机器学习算法分析用户的行为和偏好,为用户推荐个性化的产品或服务。例如,电商网站可以利用机器学习算法分析用户的购买历史和浏览行为,向用户推荐感兴趣的商品。 预测和预测分析: 机器学习可以用于预测未来事件的发生概率或者趋势。例如,金融领域可以利用机器学习算法进行股票价格预测、信用评分、欺诈检测等。 医疗诊断和生物信息学: 机器学习在医疗诊断、药物研发、基因组学等领域有着重要的应用。例如,可以利用机器学习算法分析医学影像数据进行疾病诊断,或者利用机器学习算法分析基因数据进行疾病风险预测。 智能交通和物联网: 机器学习可以应用于智能交通系统、智能城市管理和物联网等领域。例如,可以利用机器学习算法分析交通数据优化交通流量,或者利用机器学习算法分析传感器数据监测设备状态。 以上仅是机器学习应用的一部分,随着机器学习技术的不断发展和应用场景的不断拓展,机器学习在各个领域都有着重要的应用价值,并且正在改变我们的生活和工作方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值