activeMQ消息中间件

消息中间件
作用:
1.系统解耦合,如一个模块被多个模块依赖,要保证其中一个模块出现异常了,另外的模块不会收到影响,此时就需要更加解耦合的技术 比如activeMQ ,一个作为生产者的模块只需要把消息发送出去就算完成任务了,后边自然会有消费者去消费消息.
2.流量削峰
3.异步通信 发送短信 ,发送邮件等
jms是java操作消息中间件的规格,类似于jdbc
jms消息传递类型有二种:
点对点模式:一个生产者生产了消息,只能被一个消费者消费
发布订阅模式:一个生产者生产了消息,可以被多个消费者消费,但是如果一个消费者后于生产者创建,会接收不到这条消息

JMS 定义了五种不同的消息正文格式:
TextMessage–一个字符串对象
MapMessage–一套名称-值对
ObjectMessage–一个序列化的 Java 对象
BytesMessage–一个字节的数据流
StreamMessage – Java 原始值的数据流

想使用activeMQ
1首先得有一台nginx服务器
2将 activeMQ的压缩包(官方网站下载:http://activemq.apache.org/ ) 上传至服务器
3解压文件
4为 apache-activemq-5.12.0 目录赋权
5进入bin目录
6赋与执行权限
7启动 ./activemq start

启动
打开浏览器输入地址 端口号8161
输入用户名和密码 均为 admin
进入主界面
点对点消息列表
Number Of Pending Messages :等待消费的消息 这个是当前未出队列的数量。
Number Of Consumers :消费者 这个是消费者端的消费者数量
Messages Enqueued :进入队列的消息 进入队列的总数量,包括出队列的。
Messages Dequeued :出了队列的消息 可以理解为是消费这消费掉的数量

消息生产者
//1.创建连接工厂
ConnectionFactory connectionFactory=new
ActiveMQConnectionFactory(“tcp://192.168.25.135:61616”);
//2.获取连接
//3.启动连接
//4.获取 session (参数 1:是否启动事务,参数 2:消息确认模式)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.创建队列对象
Queue queue = session.createQueue(“test-queue”);
//6.创建消息生产者
MessageProducer producer = session.createProducer(queue);
//7.创建消息
TextMessage textMessage = session.createTextMessage(“欢迎来到神奇世界”);
(上边三个全部由seission创建)
//8.发送消息
producer.send(textMessage);
//9.关闭资源

消息消费者
main方法中
//5.创建队列对象
Queue queue = session.createQueue(“test-queue”);
//6.创建消息消费
MessageConsumer consumer = session.createConsumer(queue);
//7.监听消息
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage textMessage=(TextMessage)message;
try {
System.out.println(“接收到消息:”+textMessage.getText());
} catch (JMSException e) {
// TODO Auto -generated catch block
e.printStackTrace();
}
}
});
//8.等待键盘输入
System.in.read();
//9.关闭资源

发布/订阅模式
就是把所有的queue替换成topic

spring整合jms
点对点:
引入springJMS activeMQ 依赖
在 src/main/resources 下创建 spring 配置文件 applicationContext-jms-producer.xml :
包扫描
连接工厂bean :targetConnectionFactory 属性为地址
连接工厂bean :connectionFactory 属性为targetConnectionFactory
jmsTemplate Spring 提供的 JMS 工具类,它可以进行消息发送、接收等
属性为 connectionFactory
queueTextDestination 队列目的地,点对点的 文本信息
它内部的队列名

在 cn.itcast.demo 包下创建消息生产者类
public class QueueProducer {
@Autowired
private JmsTemplate jmsTemplate;
@Autowired
private Destination queueTextDestination;
// 发送文本消息
public void sendTextMessage(final String text){
jmsTemplate.send(queueTextDestination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(text); } }); } }
以上为 消息生产者类

在 src/test/java 创建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations=“classpath:applicationContext-jms-producer.xml”)
public class TestQueue {
@Autowired
private QueueProducer queueProducer;
@Test
public void testSend(){
queueProducer.sendTextMessage(“SpringJms-点对点”); } }
这是把消息提供者抽取成为了一个单独的类似工具类的类 谁想发消息就调用它
但是在xml中把队列名写死了我无法理解
消费者 的xml在连接工厂 ,队列目的地(包含名字) 的基础上加上这些:

编写监听类
public class MyMessageListener implements MessageListener {
public void onMessage(Message message) {
TextMessage textMessage=(TextMessage)message;
try {
System.out.println(“接收到消息:”+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace(); } } }

(4)创建测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations=“classpath:applicationContext-jms-consumer-queue.xml”)
public class TestQueue {
@Test
public void testQueue(){
try {
System.in.read();
} catch (IOException e) { e.printStackTrace(); } } }
//上面这个类的目的就是为了配置文件持续被加载,没别的意思

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值