JMS-Dome

JMS:Java Message Service应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序

之间,或分布式系统中发消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS

提供支持。

启动:下载apache-mq后bin目录下对应系统(win32/win64)activemq.bat为启动项目,用户名:admin 密码:admin网页访问地址:http://localhost:8161/admin/   对应可以看到Queues/Topics等标签

配置:application.propertity

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin

spring.activemq.pool.enabled=false

springBoot添加ActiveMQ支持:spring-boot-starter-activemq

优势:异步,可靠(JMS保证消息只会传递一次)

点对点消息模型,又称消费生产模型:每个消息只有一个接受者,消息发送者和消息接受者没有时间依赖性,当消息发送者

发送消息时,无论接收者在不在运行,都能获取到消息,当接收者收到消息的时候,会发送确认收到

通知(achnowledgement),多个消费者会轮流消费队列中的消息,ActiveMQQueue

//生产者
@Service
public class Producer {  
    @Resource
    private JmsMessagingTemplate jmsMessagingTemplate;  
    // 发送消息,destination是发送到的队列,message是待发送的消息  
    public void sendMessage(String destinationName, final String message){  
    System.out.println("***************>>>>>>>>>发送queue消息 " + message);
    Destination destination = new ActiveMQQueue(destinationName);
    jmsMessagingTemplate.convertAndSend(destination, message);  
    }

//消费者
@Service
public class Consumer {  
        // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息  
    @JmsListener(destination = "mytest.queue")
    public void receiveQueue(String text) {  
        System.out.println("Consumer收到的报文为:"+text);  
    }  
}

发布/订阅消息传送模型:发布者发布一个消息,通过topic传递给所有的客户端,一个消息可以传递给多个订阅者,发布者和订阅者有时间依赖性,只有当客户端创建订阅后才能接受消息,且订阅者需一直保持活动状态以接收消息。为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。ActiveMQTopic

@Service
public class Publisher {

@Resource
private JmsMessagingTemplate jmsMessagingTemplate;

public void publish(String destinationName,String message){
ActiveMQTopic destination = new ActiveMQTopic(destinationName);
System.out.println("***************>>>>>>>>>发布topic消息 " + message);
jmsMessagingTemplate.convertAndSend(destination, message);
}

}

@Service
public class Subscriber {


@JmsListener(destination = "mytest.topic", containerFactory = "jmsListenerContainerFactory")
public void subscribe(String text){
System.out.println("**********<<<<<<1收到的订阅消息为:"+text);
}

@Bean
JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory){
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ActiveMQ安装 : 1.下载:http://activemq.apache.org/download.html 最新Windows版本 2.配置jdk环境,解压ActiveMQ到本地 3.启动ActiveMQ服务器: 32位机 : 直接运行\bin\win32\activemq.bat 64位机 : 直接运行\bin\win64\activemq.bat 4.打开ActiveMQ消息管理后台系统 http://localhost:8161/admin/ 参考文章为 : HelloWorld : http://blog.csdn.net/baggio7095586/article/details/5708519 进阶 :http://haohaoxuexi.iteye.com/blog/1893038 helloworld阶段 : 一个发送消息的程序,一个接收消息的程序..实现最简单的JMS交流... 监听器阶段 : ⑴MessageListener,最简单的监听器..只是拿来监听接收信息的 ⑵SessionAwareMessageListener,有个session的参数..可以拿来对接收到的信息再做响应.. ⑶MessageListenerAdapter,将消息委托交给一个普通的java类来处理.. 转化器阶段 : 实现MessageConverter接口来转换JMS对象与java对象.. 其实在使用MessageListenerAdapter时,Spring默认为我们提供了SimpleMessageConverter转换器.. 事务(无代码): 在Spring整合JMS的应用中,如果我们要进行本地的事务管理的话非常简单,只需要在定义对应的消息监听容器时指定其sessionTransacted属性为true,如: <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="connectionFactory" /> <property name="destination" ref="queueDestination" /> <property name="messageListener" ref="consumerMessageListener" /> <property name="sessionTransacted" value="true"/> </bean> 该属性值默认为false,这样JMS在进行消息监听的时候就会进行事务控制,当在接收消息时监听器执行失败时JMS就会对接收到的消息进行回滚, 对于SessionAwareMessageListener在接收到消息后发送一个返回消息时也处于同一事务下,但是对于其他操作如数据库访问等将不属于该事务控制。 数据库跟JMS挂钩的事务先别理..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值