diff --git a/source/_posts/Java/消息中间件(1)-初见.md b/source/_posts/Java/消息中间件(1)-初见.md index 1d187c9..81f04b8 100644 --- a/source/_posts/Java/消息中间件(1)-初见.md +++ b/source/_posts/Java/消息中间件(1)-初见.md @@ -3,6 +3,8 @@ title: 消息中间件(1)-初见 date: 2018-10-24 10:57:22 categories: - Java +tags: + - JMS --- ### 中间件 @@ -13,6 +15,15 @@ categories: ### 消息中间件 关注**数据的发送和接收**, 利用高效可靠的异步消息传递机制集成**分布式**系统 +不同的模块或者服务之间利用消息中间件进行间接的交互, 可以降低耦合度 +也可以适应容灾的需要, 避免由于一个服务出现问题对其他服务造成重大影响 + +比如A服务一个业务功能执行时需要发送一份通知邮件 +发送邮件的服务可以独立出来 +由A服务向消息中间件发送有关于邮件的消息, 发送邮件服务负责从消息中间件获取这些消息进行对应的处理 +如果由A服务直接调用邮件服务 +若邮件服务出现问题, 比如响应缓慢, 那么A服务的正常业务功能就会受到重大影响 + ### JMS Java消息服务(Java Message Service) 即JMS, 是一个Java平台中关于面向消息中间件的API, 用于在两个程序之间, 或分布式系统中发送消息, 进行异步通信 @@ -53,7 +64,6 @@ bin/activemq start > /dev/null 2>&1 & #停止 bin/activemq stop ``` -ActiveMQ启动会占用2个端口 默认的管理页面端口是8161, 用浏览器访问可以打开管理页面 默认的用户名和密码是admin/admin @@ -65,5 +75,6 @@ ActiveMQ启动会占用2个端口 注意格式为`用户名: 密码,角色1,角色2...` -61616为ActiveMQ的默认通讯端口 +ActiveMQ的默认通讯端口有5个, 用于支持不同的协议 设定在`conf/activemq.xml`当中 +![通讯端口设定](/images/Java/消息队列/transport.png) diff --git a/source/_posts/Java/消息中间件(2)-java连接ActiveMQ.md b/source/_posts/Java/消息中间件(2)-java连接ActiveMQ.md new file mode 100644 index 0000000..943e3f8 --- /dev/null +++ b/source/_posts/Java/消息中间件(2)-java连接ActiveMQ.md @@ -0,0 +1,76 @@ +--- +title: 消息中间件(2)-java连接ActiveMQ +date: 2018-11-2 15:59:34 +categories: + - Java +tags: + - JMS +--- + +使用java连接activeMQ +### 引入依赖 +```xml + + org.apache.activemq + activemq-all + 5.15.7 + +``` + + +### 1.连接ActiveMQ +```java +//step1 创建连接工厂 +ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.142.128:61616"); + +//step2 创建连接 +Connection connection = connectionFactory.createConnection(); + +//step3 启动连接 +connection.start(); + +//step4 创建会话 +Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); +// 第一个参数是是否使用事务, 第二个参数是应答模式, 这里是自动应答 + +//step5 创建一个目标(队列) +Queue queue = session.createQueue("queue-test"); +``` +使用完毕之后需要调用close关闭连接 +```java +// 关闭连接 +connection.close(); +``` + +### 2.生产者 +使用上面的步骤当中创建的会话, 使用生产者向消息中间件发送消息 +```java +// 创建生产者 +MessageProducer producer = session.createProducer(queue); + +// 创建消息 +TextMessage textMessage = session.createTextMessage("这是一条测试消息"); + +// 发送消息 +producer.send(textMessage); +``` + +### 3.消费者 +创建连接和创建会话的步骤都是一样的 +```java +// 创建消费者 +MessageConsumer consumer = session.createConsumer(destination); + +// 创建监听器 +consumer.setMessageListener(new MessageListener() { + @Override + public void onMessage(Message message) { + TextMessage textMessage = (TextMessage)message; + try { + System.out.println("接收消息:"+textMessage.getText()); + } catch (JMSException e) { + e.printStackTrace(); + } + } +}); +``` diff --git a/source/images/Java/消息队列/transport.png b/source/images/Java/消息队列/transport.png new file mode 100644 index 0000000..9e9feb0 Binary files /dev/null and b/source/images/Java/消息队列/transport.png differ