Spring ActiveMQ

JMS即Java消息服务,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

体系架构:JMS提供者(中间件(即JMS接口的实现)),JMS客户(生产或消费基于消息的JAVA的应用程序或对象)

JMS生产者(创建并发送消息的JMS客户)

JMS消费者(接收消息的JMS客户)

JMS消息(传递的数据对象)

JMS队列(存放消息的容器)

对象模型:

连接工厂(ConnectionFactory),有管理员创建,并绑定到JNDI树中,客户端使用JNDI查找连接工厂

JMS连接(Connection),表示JMS客户端和服务器端之间的一个活动的连接,由客户端通过调用连接工厂的方法建立的

JMS会话(Session),表示JMS客户与JMS服务器之间的会话状态,会话建立在连接上,表示客户与服务器之间的一个会话线程

JMS目的(Destination) 消息队列

生产者和消费者

JMS消息通常有两种类型:

点对点:消息分发给一个单独的使用者,点对点消息往往与队列Queue相关联,生产者知道消费者的队列,并直接将消息发送到消费者的队列,只有一个消费者获得消息

生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。

发布/订阅:支持一个事件驱动模型,消息生产者和消费者都参与消息的传递,生产者发布事件,而使用者订阅感兴趣的事件,并使用事件,该消息一般与特定的

主题(Topic)关联。发布者想一个特定的消息主题发布消息,0或多个订阅者接收来自特定消息主题的消息,发布者和订阅者彼此不知道对方,好比匿名公告板。

发布者需要建立一个订阅,以便客户能够订阅,订阅者必须保持活动状态以接收消息,除非订阅者建立了持久的订阅,这种情况下,订阅者未连接时发布的消息会在订阅

者重新连接时重新发布。

ActiveMQ允许你在Spring配置文件中配置connectionFactory,在代码里直接创建JmsTemplate,也可以使用JNDI来进行配置

JmsTemplate使用时,需要确定队列,当没有明确Desination时允许定义缺省的JMS Desination来发送消息,或者通过一个字符串的名字定位Desination,在配置文件中可以

通过constructor-arg来设置队列的名字,

JmsTemplate的send()方法,他有三个重载方法,receive()也有三个重载方法,其中getReceiveTimeout方法显示的阻塞的毫秒数,默认情况下,超时被设置为-1,表示无限等待

以接受一个消息。

convertAndSend()适用于把一个Java对象转换成消息实例,并把他们直接发送出去,为了执行转换,convertAndSend()使用当前配置在JmsTemplate中的MessageConverter实例

转换的类型包括 TextMessage,MapMessage,ObjectMessage,StreamMessage,BytesMessage

receiveAndConvert()接收一个消息的时候进行转换。

JMS本地事务

想要自己管理JMS事务的话,我们使用JmsTransactionManager来代替PlatformTransactionManager,例如:以下的1没有启用事务,而2通过对1的代理,增加了事务的功能,所以

两者的最后操作结果也是不一样的。

1.

<bean id="senderTarget" class="">

<property name="jmsTemplate">

<ref bean="jmsTemplate" />

</property>

</bean>

2.

<bean id="sender" class="">

<property name="transactionManager">

<ref local=“transactionManager”/>

</property>

<property name="target">

<ref local="senderTarget"/>

</property>

<property name="transactionAttributes">

<props><prop key="send*">PROPAGATION_REQUIRED</prop></props>

</property>

</bean>

异步接收消息:接收端需要实现MessageListener接口,我们需要配置connection(JmsConnectionFactoryBean),还需要配置一个session(JmsSessionFactoryBean).

操作实例:

下载 activeMQ 5.6.0版本,解压后执行目录下activemq.bat,用来启动activeMQ

<Resource name="myJMS/ConnectionFactory"
		  auth="Container"
		  type="org.apache.activemq.ActiveMQConnectionFactory"
		  description="JMS Connection Factory"
		  factory="org.apache.activemq.jndi.JNDIReferenceFactory"
		  brokerURL="tcp://10.0.0.8:61616"
		  brokerName="MyActiveMQBroker" 
	      useEmbeddedBroker="false"/>

	<Resource name="jms/topic/MyTopic"
        auth="Container"
        type="org.apache.activemq.command.ActiveMQTopic"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory"
        physicalName="MY.TEST.FOO"/>
	
    <Resource name="jms/queue/MyQueue"  
        auth="Container"  
        type="org.apache.activemq.command.ActiveMQQueue"  
        factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
        physicalName="MY.TEST.FOO.QUEUE"/>

通过JNDI配置连接工厂,点对点设置,订阅设置:

<Context docBase="D:\Maven_TEST\jt-weixin1\src\main\webapp" path="/weixin1" reloadable="false"  workDir="D:\apache-tomcat-7.0.22\work\Catalina\localhost\weixi1n">
			<ResourceLink global="myJMS/ConnectionFactory" name="myJMS/ConnectionFactory" />
			<ResourceLink global="jms/topic/MyTopic" name="jms/topic/MyTopic" />
			<ResourceLink global="jms/queue/MyQueue" name="jms/queue/MyQueue" /> 
      </Context>

指定项目中的使用:

<resource-ref>
      <description>ConnectionFactory</description>
      <res-ref-name>myJMS/ConnectionFactory</res-ref-name>
      <res-type>org.apache.activemq.ActiveMQConnectionFactory</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  <resource-ref>
      <description>MyTopic</description>
      <res-ref-name>jms/topic/MyTopic</res-ref-name>
      <res-type>org.apache.activemq.command.ActiveMQTopic</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>
  <resource-ref>
      <description>MyQueue</description>
      <res-ref-name>jms/queue/MyQueue</res-ref-name>
      <res-type>org.apache.activemq.command.ActiveMQQueue</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>


Web.xml文件的配置

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/myJMS/ConnectionFactory"/>
    </bean>
    <bean id="messageQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jms/queue/MyQueue"></property>
    </bean>
    <bean id="messageTopic" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/jms/topic/MyTopic"></property>
    </bean>
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="connectionFactory"></property>
        <property name="defaultDestination" ref="messageQueue"></property>
    </bean>
    <bean id="messageSender" class="cn.com.onezero.MessageSender">
        <property name="jmsTemplate" ref="jmsTemplate"></property>  
    </bean>
    <bean id="receiveMessageListener"  class="cn.com.onezero.MessageReceiver">
    </bean>
    <bean id="listenerContainer"  
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
        <property name="connectionFactory" ref="connectionFactory"></property>  
        <property name="destination" ref="messageQueue"></property>  
        <property name="messageListener" ref="receiveMessageListener"></property>  
    </bean>


Spring配置文件中的配置信息





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值