目录


mac-message - 配置

基本配置

  message.xml,此配置基本上相固定,只需要配置所用的消息队列 <bean id="messageContext" class="com.boarsoft.message.core.MessageContext"> <!-- 配置消息队列 --> <property name="targetQueueMap"> <map> <!-- 消息队列queue1 --> <entry key="queue1"> <bean class="com.boarsoft.message.bean.TargetMQ"> <property name="code" value="queue1" /> <property name="relay" value="true" /> </bean> </entry> <!-- 用于接收签收回执的消息队列ack1 --> <entry key="ack1"> <bean class="com.boarsoft.message.bean.TargetMQ"> <property name="code" value="ack1" /> </bean> </entry> </map> </property> </bean> <bean id="localMsgSvc2" class="com.boarsoft.message.core.MessageServiceImpl2"> <property name="messageContext" ref="messageContext" /> <!-- 作为消息中间件,不需要注入 serverMsgSvc --> <!-- <property name="serverMsgSvc" ref="serverMsgSvc" /> --> </bean> <bean id="localMsgSvc1" class="com.boarsoft.message.core.MessageServiceImpl1"> <property name="messageContext" ref="messageContext" /> <!-- <property name="siblingMsgSvc" ref="siblingMsgSvc" /> --> <property name="localMsgSvc2" ref="localMsgSvc2" /> </bean> <bean id="messenger" class="com.boarsoft.message.core.Messenger"> <property name="localMsgSvc1" ref="localMsgSvc1" /> </bean> <bean id="messageCore" class="com.boarsoft.message.core.MessageCore"> <property name="threadPool" ref="threadPool" /> </bean> <!-- 用于消息收发统计,可选 --> <bean id="messageServerStat" class="com.boarsoft.message.core.MessageStatServiceImpl"> <property name="messageContext" ref="messageContext" /> </bean>

外置队列信息配置

  为了方便对队列信息进行动态修改和发布,我们将队列的配置专门放到queues.xml中,并让messageContext去装载它。
  queues.xml的路径配置在 conf/config.properties 中。当message.xml中不为messageContext注入targetQueueMap属性,messageContext将根据此配置去读取queues.xml
  注:通常客户端所需的队列配置较少,可像上面的示例一样配置在message.xml中,而服务端的队列配置较多,且需要动态更新,放到queues.xml中更好。 mq.conf.dir=d\:/temp/message/server

服务端ActiveMQ配置

  mac-message通过内嵌ActiveMQ来实现与ActiveMQ的集成,需要在spring配置文件中导入 activemq.xml
  通过ActiveMQ 提供的拦截器,可以拦截输入到ActiveMQ的消息。
  然后通过为 InterceptorPlugin 注入 converterMap 属性来指定要拦截的队列 <broker xmlns="http://activemq.apache.org/schema/core" useJmx="false"> <transportConnectors> <transportConnector uri="amqp://0.0.0.0:5672" /> <transportConnector uri="tcp://0.0.0.0:61616" /> </transportConnectors> <plugins> <discardingDLQBrokerPlugin dropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" /> <!-- ActiveMQ消息拦截器 --> <bean xmlns="http://www.springframework.org/schema/beans" class="com.boarsoft.message.amq.plugin.InterceptorPlugin"> <property name="localMsgSvc1" ref="localMsgSvc1" /> <!-- 消息转换器列表,用于将ActiveMQ消息转换为mac-message中定义的消息对象 --> <property name="converterMap"> <map> <!-- Key为ActiveMQ中的队列名 --> <entry key="queue1"> <bean class="com.boarsoft.boar.message.demo.AmqJsonMsgConverter" /> </entry> </map> </property> </bean> </plugins> </broker>

客户端ActiveMQ长连接配置

  长连接方式需要在生产者和消费都都增加 activemq.xml,内容如下: <!-- 实现 javax.jms.Message 与 com.boarsoft.message.bean.Message 之间的互转 --> <bean id="msgConverter" class="com.boarsoft.message.demo.DemoJmsMsgConverter"> </bean> <bean id="amqClient1" class="com.boarsoft.boar.gateway.activemq.AmqClientEx"> <property name="destMap"> <map> <entry key="queue1"> <bean class="com.boarsoft.boar.gateway.activemq.AmqDestination"> <property name="producer"> <bean class="com.boarsoft.boar.gateway.activemq.AmqProducerEx"> <property name="converter" ref="msgConverter" /> </bean> </property> <property name="consumer"> <bean class="com.boarsoft.boar.gateway.activemq.AmqConsumerEx"> <property name="converter" ref="msgConverter" /> <property name="handler" ref="queue1Consumer1" /> </bean> </property> </bean> </entry> </map> </property> <property name="connectionFactory"> <bean class="org.apache.activemq.pool.PooledConnectionFactory"> <property name="maxConnections" value="10" /> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://127.0.0.1:61616)?randomize=true" /> <property name="userName" value="admin" /> <property name="password" value="admin" /> </bean> </property> </bean> </property> </bean>